初始化列表-默认值

Initialization in list - default value

本文关键字:默认值 列表 初始化      更新时间:2023-10-16

我有这个代码示例:

#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++中的值初始化,对于标量类型可以归结为零初始化。它不以任何方式限制于构造函数初始化列表。它可以在各种其他上下文中使用

从标准化时代开始在c++中就是这样工作的,除了在c++ 03之前的版本中没有值初始化这样的东西。在c++ 98中,()初始化器触发默认初始化,这也将标量类型归零。

在现代c++ (c++ 11及更高版本)中,您可以使用{}初始化器而不是()初始化器来达到相同的效果。使用{},您还可以执行

double d{};

声明变量d0初始化

当您执行_Field()时,我认为您执行零初始化。