为什么sizeof操作员返回的结构尺寸大于结构成员的总尺寸?
在C++中sizeof('a') == sizeof(char) == 1.这具有直观意义,因为它'a'是一个字符文字,并且sizeof(char) == 1由标准定义.
然而,在C中sizeof('a') == sizeof(int).也就是说,看起来C字符文字实际上是整数.有谁知道为什么?我可以找到很多关于这个C怪癖的提及,但没有解释为什么它存在.
给定的C代码
#include <stdio.h>
int x = 14;
size_t check()
{
struct x {};
return sizeof(x); // which x
}
int main()
{
printf("%zu",check());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我的32位实现上给出4作为C的输出,而在C++中给出代码
#include <iostream>
int x = 14;
size_t check()
{
struct x {};
return sizeof(x); // which x
}
int main()
{
std::cout<< check();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出1.为何如此差异?
可能重复:
为什么C字符文字的内部而不是字符?
为什么在使用C时sizeof('x')返回4但sizeof('x')在C++中返回1?
C++通常只是C的超集,所以为什么这两个结果有所不同?
编辑 只是进一步澄清.这似乎是标准委员会的刻意举动,我认为如果没有充分的理由,就不会改变'x'的大小.我对原因感兴趣.