具有灵活数组成员的结构的大小
Size of a struct with flexible array member
给定
struct Foo {
uint32_t a;
uint32_t b[];
};
什么是sizeof(Foo)
?是实现定义的行为还是未定义的行为?C 与 C++ 的答案不同吗?
编译器将忽略灵活数组成员,因为它不存在。
C11-§6.7.2.1 (p18(
[...]在大多数情况下,将忽略灵活数组成员。特别是,结构的大小就像省略了柔性数组成员一样,只是它可能具有比省略所暗示的更多的尾随填充 [...]。
AFAIK,柔性数组成员在 c++14 之前不是C++标准的一部分。但是,GNU支持它作为一个扩展。C 和 C++ 的行为相似。
相关文章:
- 使用 std::index_sequence 初始化具有固定大小数组成员的 POD 结构容器
- 用于对项目进行分组并将单个项目映射到其他组成员的数据结构
- 访问数组中所有结构的成员
- 具有灵活数组成员的结构的大小
- 初始化固定的 C 数组成员结构
- 带有布尔数组成员的 C++ 结构.如何在主代码中使用
- size_t结构非数组成员崩溃的强制转换
- 返回具有数组成员的本地结构
- 从结构传递数组成员会导致访问读取冲突
- 有没有办法将数组行为作为静态结构数据成员?
- 初始化具有动态长度字符串的 char 数组成员的结构
- 如何将结构的成员数组作为参数传递给函数
- 从单独函数中的结构中检索数组成员
- 将void*强制转换为具有数组成员的结构
- 具有不同大小的二维结构数组成员变量
- 带有std::array的可变进模板结构体与c风格数组成员的区别
- C++错误:初始化结构实例的向量数组成员
- 结构的数组成员的默认值
- 在C++中只包含一个int数组成员的结构中填充
- 如何将字符数组复制到结构的成员中