Rob*_*nes 12 c++ static-members
我想知道静态成员变量通常是如何在C++等语言中实现的,如果它们的使用会影响实例化对象的大小.
我知道静态成员由该类的所有实例共享,但它是如何共享的?如果它影响对象大小,那么有10个静态变量会增加大于1的大小吗?
我问,因为我可以想到它可以实现的两种方式:
Naw*_*waz 25
在C++中,静态成员不属于类的实例.它们不会增加实例和类的大小,即使是1位!
struct A
{
int i;
static int j;
};
struct B
{
int i;
};
std::cout << (sizeof(A) == sizeof(B)) << std::endl;
Run Code Online (Sandbox Code Playgroud)
输出:
1
Run Code Online (Sandbox Code Playgroud)
也就是说,尺寸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).
正如我所说,静态成员更像是全局对象!
静态成员在编译时由编译器解析.在许多方面,静态变量与全局变量没有什么不同.差异仅在于您在代码中引用它们的方式,它们可见的范围以及它们初始化的方式和时间.
归档时间: |
|
查看次数: |
4426 次 |
最近记录: |