任何人都可以解释为什么sizeof函数在下面的代码中返回不同的值?
//static member
class one
{
public :
static const int a = 10;
};
//non static member
class two
{
public :
int a;
};
int main()
{
cout << sizeof(one); //print 1 to lcd
cout << sizeof(two); //print 4 to lcd,differ from size of one class
}
Run Code Online (Sandbox Code Playgroud)
Som*_*ude 11
你应该学习的第一件事是,sizeof它不是一个功能,它是一个操作员就像+或||.
至于你的问题.静态成员变量实际上不是在类以同样的方式非静态成员变量,所以只有静态成员类将有大小为零.但同时所有对象都需要可寻址,因此具有,这就是为什么sizeof要给你1第一堂课.
one没有非静态成员,因此它的实例为空.静态成员不包含在该类型的任何对象中,而是独立于任何对象而存在.它的大小为1而不是零,因为C++不允许类型的大小为零(以确保不同的对象具有不同的地址).
two确实有一个非静态成员,因此实例必须足够大才能包含该成员.在您的情况下,其大小为4,与其int成员的大小相同.
静态数据成员不存储在类本身中,因此不会对sizeof类做出贡献。我们可以通过 C++ 标准草案第 9.4.2 节静态数据成员来看到这一点,其中说:
静态数据成员不是类的子对象的一部分。
类的one大小为 ,1因为完整的对象应具有非零大小,来自9 类部分 ,其中表示:
类类型的完整对象和成员子对象应具有非零大小。106
请注意,这sizeof是一个运算符而不是函数。