2011-03-14 123 views
1

in C++ 其中靜態或非靜態變量保持不變嗎?我的意思是在記憶中。C++ static non-static

和,什麼時候初始化靜態或非靜態變量?

需要有人幫助我明白我的想法。 謝謝!

和C呢?相同?

+0

也許你會發現一些材料在這裏有趣:http://stackoverflow.com/questions/5162580/what-happens-when-a-computer-program-runs – Muggen 2011-03-14 05:48:56

回答

11

它們可以到達編譯器(或鏈接器或加載器)想要將它們放入內存中的任何位置,C和C++標準不要求這種詳細程度。他們只強制執行行爲。

通常,靜態成員在程序啓動時(包括在編譯時,以便它們只是在已初始化的狀態下加載)或在第一次使用之前立即初始化一次。

+0

很好(並小心翼翼)措辭。 – 2011-03-14 06:01:12

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. 

我不確定靜態成員。

0

靜走在同一個地方的全局,這往往由編譯器來決定,當程序被加載並持續創建,直到節目結束

非靜走到哪裏,無論你把它們(在堆棧或堆上)