列表中的初始化 - 默认值

时间:2015-06-09 18:35:21

标签: c++ initialization

我有这个代码示例:

#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?

2 个答案:

答案 0 :(得分:4)

是的,确实如此。就像

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

将使用d初始化0,并使用*p初始化0

()初始化程序代表C ++中的 value-initialization ,归结为标量类型的零初始化。它绝不限于构造函数初始化列表。它可以在各种其他环境中使用。

自标准化时代开始以来,它一直在C ++中运行,除了在C ++ 03之前的语言版本中没有 value-initialization 这样的东西。在C ++ 98中,()初始化程序触发了默认初始化,这也将标量类型清零。

在现代C ++(C ++ 11及更高版本)中,您可以使用{}初始化程序而不是()初始化程序来实现相同的效果。使用{},您也可以

double d{};

声明使用d初始化的变量0

答案 1 :(得分:0)

执行_Field()时,我相信http://webaim.org/techniques/keyboard/tabindex