我使用以下代码阅读了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,因此使用(){}对其进行初始化没有区别。

10-06 13:37