Given
struct Foo {
uint32_t a;
uint32_t b[];
};
What is sizeof(Foo)
?它是实现定义的行为还是未定义的行为? C 和 C++ 的答案是否不同?
编译器将忽略灵活数组成员,因为它不存在。
C11-§6.7.2.1 (p18)
[...] 在大多数情况下,灵活数组成员被忽略。尤其,该结构的大小就像省略了灵活数组成员一样除了它可能有比省略所暗示的更多的尾部填充[...]。
AFAIK,直到 c++14 之前,灵活数组成员并不是 C++ 标准的一部分。但是,GNU 支持它作为一个扩展 https://gcc.gnu.org/onlinedocs/gcc-4.4.4/gcc/Zero-Length.html。 C 和 C++ 的行为类似。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)