2015-06-09 80 views
1

我有了這個代碼示例:初始化列表 - 默認值

#include <iostream> 

using namespace std; 

class Polygon 
{ 
private: 
    double _Field; 

public: 
    Polygon(): _Field(){} 
    void show_field(){ cout << _Field << endl; } 
}; 

int main() 
{ 
    Polygon P1; 

    P1.show_field(); 
    return 0; 
} 

我只是想知道爲什麼show()方法總是顯示我0值?默認情況下不初始化列表

Polygon(): _Field(){} 

初始化給出0場,如果沒有說法存在?

+0

是的,對於內置類型 –

+0

double默認初始化爲0 – worenga

回答

4

是的,它的確如此。就像

double d = double(); 
double *p = new double(); 

將初始化d0並分配與0初始化*p

()初始值設定項代表值初始化在C++中歸結爲標量類型的零初始化。它不受限於構造函數初始值設定項列表。它可以用於各種其他環境。

它的工作是方式C++,因爲標準化的時代的開始,除了在預C++ 03版本的語言有作爲值初始化沒有這樣的事情。在C++ 98中,()初始化程序觸發了默認初始化,這也會清除標量類型。在現代C++(C++ 11和更高版本)中,可以使用{}初始化程序而不是()初始化程序來實現相同的效果。隨着{}你也可以做

double d{}; 

其中聲明變量d0初始化。