有一个旧帖子要求一个sizeof可以返回的构造0.高信誉用户有一些高分答案说,按标准,没有类型或变量可以有0的大小.我同意100%.
然而,这个新的答案提出了这个解决方案:
struct ZeroMemory {
int *a[0];
};
Run Code Online (Sandbox Code Playgroud)
我正要进行投票和评论,但是在这里度过的时间教会我检查我100%肯定的事情.所以...让我惊讶的是,gcc并clang显示出相同的结果:sizeof(ZeroMemory) == 0.更重要的是,变量的大小是0:
ZeroMemory z{};
static_assert(sizeof(z) == 0); // Awkward...
Run Code Online (Sandbox Code Playgroud)
Whaaaat ...?
这怎么可能?
可能重复:
C++:空类对象的大小是多少?
为什么以下输出1?
#include <iostream>
class Test
{
};
int main()
{
std::cout << sizeof(Test);
return 0;
}
Run Code Online (Sandbox Code Playgroud)