gpt4 book ai didi

c++ - 静态变量的初始化

转载 作者:太空狗 更新时间:2023-10-29 21:00:13 24 4
gpt4 key购买 nike

谁能告诉我static 变量/函数何时分配内存以及在哪个内存段?即静态全局变量,静态成员变量,静态局部变量等都在程序开始前初始化一次并且都保留其值?

此外,如果 Class MyClass 有静态变量 count,当我在 main 中声明 MyClass obj 时,那么 MyClass 创建了对象并为内存分配了计数,如果我声明了 MyClass obj2,内存方面会发生什么情况? obj2中是否有count引用了obj1count?或者只有单独的内存分配。希望这样我能够清楚地提出问题。

提前致谢。

最佳答案

当我们将一个类的成员声明为static 时,这意味着无论创建多少个类对象,static 成员都只有一个拷贝。 即使静态数据成员类的对象不存在,它也存在

static 成员由该类的所有对象共享。

If I declared MyClass obj2, what happens in terms of memory? Is there any count in obj2 which refers to the count of obj1?

是的。所有对象只有一个 count。这个测试程序会解释得更清楚一点;

class Something
{
public:
static int s_nValue;
};

int Something::s_nValue = 1;

int main()
{
Something cFirst;
cFirst.s_nValue = 2;

Something cSecond;
std::cout << cSecond.s_nValue;

return 0;
}

输出:

2

因为s_nValue 是一个static 成员变量,所以s_nValue 在类的所有对象之间共享。 因此,cFirst.s_nValuecSecond.s_nValue 相同。

Furthermore, If Class MyClass has tatic variable count, when I declare MyClass obj in main, then MyClass object is created and count is given memory

没有。事实上,即使没有类的对象被实例化,count 也存在!

关于c++ - 静态变量的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22589349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com