我很抱歉問這個微不足道的問題,但我找不到明確的答案:如果我有明確的靜態初始化爲零,它是零初始化還是初始化與常量表達式?說,如果我有在C++中顯式靜態初始化爲零
a.hpp:
class A { ... static int x; }
a.cpp;
int A::x = 0;
多少次將0分配給x
?一次在零初始化期間或兩次在零初始化和恆定表達式初始化期間?
我很抱歉問這個微不足道的問題,但我找不到明確的答案:如果我有明確的靜態初始化爲零,它是零初始化還是初始化與常量表達式?說,如果我有在C++中顯式靜態初始化爲零
a.hpp:
class A { ... static int x; }
a.cpp;
int A::x = 0;
多少次將0分配給x
?一次在零初始化期間或兩次在零初始化和恆定表達式初始化期間?
在執行任何代碼之前,變量的值將爲0。 它如何得到這種方式在很大程度上取決於系統;一種典型的方法 是在加載程序時從磁盤讀取日期的圖像。 在形式上,初始化爲零,接着是初始化靜態 ,但是不符合的實現方法無法判斷,我從來沒有聽說過將這兩者分開的實現。
在Unix下,至少在其舊版本和傳統版本中, 未初始化的靜態變量被放置在bs段中, 靜態初始化數據段中的變量。磁盤上的可執行文件 包含數據段的圖像,該圖像被 複製到內存中; bs段中的所有字節都設置爲0. 在具有分頁虛擬內存的現代計算機上,我期望類似的 行爲,不同之處在於初始化將推遲到第一次訪問該頁時的初始值爲 。
如果Windows以不同的方式處理(段名除外),我會感到非常驚訝。
你怎麼能區分? – MSalters 2012-01-10 15:08:48