列表中的初始化 - 默认值
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 我相信。
我有这个代码示例:
#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 我相信。