我使用以下代码阅读了Stroustrup的this link:
class X {
int a;
public:
X(int x) { if (0<x && x<=max) a=x; else throw bad_X(x); }
X() :X{42} { }
X(string s) :X{lexical_cast<int>(s)} { }
// ...
};
我的问题是关于这条线的:X() X{42}{}
括号和大括号之间有什么区别吗?如果没有区别,是否可以在其他函数调用中使用大括号?还是只是在构造函数委托(delegate)中?最后,为什么我们应该同时使用两种语法?这有点模棱两可。
最佳答案
如果括号为空,则()
使用value initialization;如果非空,则使用direct initialization。{}
使用list initialization,如果大括号为空,则表示value initialization;如果初始化的对象是一个聚合,则表示aggregate initialization。
由于您的X
是一个简单的int
,因此使用()
或{}
对其进行初始化没有区别。