列表中的初始化 - 默认值

Initialization in list - default value

我有这个代码示例:

#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 初始化给定字段?

是的,确实如此。就像

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

将使用 0 初始化 d 并分配使用 0 初始化的 *p

() 初始化器代表 C++ 中的 value-initialization,归结为标量类型的零初始化。它不以任何方式限于构造函数初始化列表。它可以用于各种其他上下文。

自从标准化时代开始以来,它在 C++ 中就是这样工作的,除了在 C++03 之前的语言版本中没有 value-initialization 这样的东西.在 C++98 中,() 初始化器触发了 默认初始化 ,这也将标量类型归零。

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

double d{};

声明用 0 初始化的变量 d

当你做 _Field() 时,你执行 zero initialization 我相信。