【发布时间】:2018-05-01 08:23:09
【问题描述】:
有一篇旧帖子要求sizeof 将返回0 的构造。有一些来自高声誉用户的高分回答说,按照标准,没有类型或变量的大小可以为 0。我 100% 同意这一点。
但是有 this new answer 提供了这个解决方案:
struct ZeroMemory {
int *a[0];
};
我正要投反对票并发表评论,但在这里度过的时间教会我检查即使是我 100% 确定的事情。所以......令我惊讶的是gcc 和clang 显示相同的结果:sizeof(ZeroMemory) == 0。更重要的是,变量的大小是0:
ZeroMemory z{};
static_assert(sizeof(z) == 0); // Awkward...
哇……?
这怎么可能?
【问题讨论】:
-
零大小数组不是标准 C++。但扩展名。
-
@Jarod42 现在很明显了。
-
在 MSVC 下也不能编译
-
现在把它们放到一个数组中,对它们进行指针运算。
-
嗯...如果不是 0,应该不占用多少字节?
标签: c++ language-lawyer sizeof