How do static member variables affect object size?

穿精又带淫゛_ 提交于 2019-11-28 09:57:43
Nawaz

In C++, static members don't belong to the instances of class. they don't increase size of instances and class even by 1 bit!

struct A
{
    int i;
    static int j;
};
struct B
{
    int i;
};
std::cout << (sizeof(A) == sizeof(B)) << std::endl;

Output:

1

That is, size of A and B is exactly same. static members are more like global objects accessed through A::j.

See demonstration at ideone : http://www.ideone.com/YeYxe


$9.4.2/1 from the C++ Standard (2003),

A static data member is not part of the subobjects of a class. There is only one copy of a static data member shared by all the objects of the class.

$9.4.2/3 and 7 from the Standard,

once the static data member has been defined, it exists even if no objects of its class have been created.

Static data members are initialized and destroyed exactly like non-local objects (3.6.2, 3.6.3).

As I said, static members are more like global objects!

Static members are resolved by the compiler at compile-time. In many ways static variables are no different than global variables under the hood. The differences only lie in how you refer to them in your code, the scope where they are visible, and how and when they get initialized.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!