2015-06-09 78 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初始化。