为什么必须在构造函数中初始化对象数据成员,并且不能像使用基本类型一样默认初始化它们?是否可以像原始类型一样初始化它们?
这是一个例子:
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 };
Baum mit Aug.. 5
类内初始化程序仅使用operator=
语法或使用大括号初始化程序列表,而不使用函数样式初始化.所以
foo x{1};
代替
foo x(1);
应该做的伎俩.
在您的情况下,您也可以使用
foo x = 1;
但如果这会破坏foo
的构造采取单一的int
是explicit
.
类内初始化程序仅使用operator=
语法或使用大括号初始化程序列表,而不使用函数样式初始化.所以
foo x{1};
代替
foo x(1);
应该做的伎俩.
在您的情况下,您也可以使用
foo x = 1;
但如果这会破坏foo
的构造采取单一的int
是explicit
.