2013-10-01 200 views
2

當這個問題出現時,我正在通過C++對象模型。如果默認構造函數被調用,那麼類的數據成員的默認值是什麼?C++中隱式默認構造函數的默認值

例如

class A 
{ 
    int x; 
    char* s; 
    double d; 
    string str;  // very high doubt here as string is a wrapper class 
    int y[20]; 
    public : 
    void print_values() 
    { 
     cout<<x<<' '<<s<<' '<<d<<' '<<str<<' '<y[0]<<' '<<y<<endl; 
    } 
} 

int main() 
{ 
    A temp; 
    temp.print_values(); // what does this print? 
    return 0; 
} 
+0

除了字符串,所有的都是未初始化的,所以幾乎可以包含任何東西。 – goji

+0

謝謝!字符串str包含什麼?空值? – user1429322

+0

空字符串「」 – goji

回答

1

未初始化變量的值未定義,無論變量居住在哪裏。

未定義並不一定意味着零或任何特別的東西。例如,在許多調試版本中,內存中充滿了可用於檢測無效內存訪問的模式。這些被剝離的發佈版本只是在找到內存時留下的。

+0

雖然在'std :: string'的情況下,變量*是*被定義的。在該類中使用任何其他變量時,可能會產生未定義的行爲,「str」不會。 – Shoe

1

你真的無法預測什麼將是在你的記憶,當你分配它。 可能有幾乎任何東西,因爲你正在閱讀的內存沒有被設置爲0(或者我應該說的其他任何東西)。 大多數情況下,您可以在小可執行文件中找到數值爲0的值。