c ++静态非静态

时间:2011-03-14 05:42:08

标签: c++ c static non-static

在c ++中 静态或非静态变量在哪里?我的意思是在记忆中。

和,什么时候初始化静态或非静态变量?

需要有人帮助我明白我的想法。 谢谢!

那么C呢?相同?

3 个答案:

答案 0 :(得分:11)

他们可以去编译器(或链接器或加载器)想要将它们放在内存中的任何地方,C和C ++标准并不强制要求这样的细节。他们只强制行为。

通常,静态成员在程序启动时(包括在编译时,以便它们只是在已经初始化的状态下加载)或在第一次使用之前立即初始化一次。

答案 1 :(得分:0)

驻留位置的非静态成员取决于对象的实例化方式。

class foo
{
    int num ; // Non-Static member 
    // ....
};

foo obj ; // In this case `num` resides on stack. In fact, obj it self resides on stack
foo *temp = new foo;  // In this case `num` resides on heap or in memory location acquired from the free store.

我不确定静态成员。

答案 2 :(得分:0)

静态与globals在同一个地方,它往往由编译器决定,并在程序加载时创建并持续到程序结束

非静态无论你把它们放在哪里(在堆栈或堆上)