[英]How do static member variables affect object size?
我想知道静态成员变量通常是如何在C ++等语言中实现的,如果它们的使用会影响实例化对象的大小。
我知道静态成员由该类的所有实例共享,但它是如何共享的? 如果它影响对象大小,那么有10个静态变量会增加大于1的大小吗?
我问,因为我可以想到它可以实现的两种方式:
在C ++中,静态成员不属于类的实例。 它们不会增加实例和类的大小,即使是1位!
struct A
{
int i;
static int j;
};
struct B
{
int i;
};
std::cout << (sizeof(A) == sizeof(B)) << std::endl;
输出:
1
也就是说, A
和B
大小完全相同。 静态成员更像是通过A::j
访问的全局对象。
请参阅ideone上的演示: http : //www.ideone.com/YeYxe
来自C ++标准(2003)的$ 9.4.2 / 1,
静态数据成员不是类的子对象的一部分 。 该类的所有对象共享的静态数据成员只有一个副本 。
从标准中获得9.4.2 / 3和7美元,
一旦定义了静态数据成员,即使没有创建其类的对象,它也存在。
静态数据成员的初始化和销毁与非本地对象完全相同(3.6.2,3.6.3)。
正如我所说,静态成员更像是全局对象!
静态成员在编译时由编译器解析。 在许多方面,静态变量与全局变量没有什么不同。 差异仅在于您在代码中引用它们的方式,它们可见的范围以及它们初始化的方式和时间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.