【发布时间】:2016-05-15 19:31:39
【问题描述】:
有人可以帮我理解sizeof() 操作员的行为吗?
#include <iostream>
using namespace std;
class A{
int first;
double last;
public:
A(int a)
{
cout << a << endl;
}
};
int main()
{
A a(3);
cout << sizeof(a) << endl;
return 0;
}
此代码将我的大小打印为 16 个字节。类的大小是根据其成员计算的。所以我有 4 个字节 (int) + 8 个字节 (double) = 12。
那么为什么我得到了 16 个字节?
当我注释掉 int 和 double 成员时,我得到 1 个字节。
【问题讨论】:
-
如果您使用 Visual C++,请参阅 msdn.microsoft.com/en-us/library/xh3e3fd0.aspx 并尝试使用
/Zp1选项将输出设为 12。 -
不,我用的是普通的g++编译器
-
GCC 和 Visual C++ 一样“普通” :) 无论如何,每个 C++ 编译器都提供类似的选项。这些东西本质上是特定于实现的。
-
打包和字节对齐和填充可能会导致您看到的内容。您还应该知道,可以通过精确控制大小且没有填充来构建您的结构或类。但这是一个不同的问题。