默认初始化作为对象的数据成员?

shi*_*zou 1 c++ syntax object c++11

为什么必须在构造函数中初始化对象数据成员,并且不能像使用基本类型一样默认初始化它们?是否可以像原始类型一样初始化它们?

这是一个例子:

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
};
Run Code Online (Sandbox Code Playgroud)

Bau*_*gen 5

类内初始化程序仅使用operator=语法或使用大括号初始化程序列表,而不使用函数样式初始化.所以

foo x{1};
Run Code Online (Sandbox Code Playgroud)

代替

foo x(1);
Run Code Online (Sandbox Code Playgroud)

应该做的伎俩.

在您的情况下,您也可以使用

foo x = 1;
Run Code Online (Sandbox Code Playgroud)

但如果这会破坏foo的构造采取单一的int是explicit.