为什么必须在构造函数中初始化对象数据成员,而不能像原始类型那样默认初始化它们?是否可以像使用原始类型一样初始化它们?
这是一个例子:
class foo {
int a;
public:
foo(int _a) :a(_a) {};
};
class bar {
string a = "asdf";//no error
int num = 1;//no error
foo x(1); //error, why?
foo z;
public:
bar(): z(1){}//no error
};
最佳答案
类内初始化器仅适用于 operator=
语法或大括号初始化器列表,不适用于函数样式初始化。所以
foo x{1};
代替
foo x(1);
应该可以解决问题。
在你的情况下,你也可以使用
foo x = 1;
但如果 foo
的构造函数采用单个 int
是显式
,那将中断。
关于c++ - 默认初始化数据成员是对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34720705/