使具有多个参数explicit的构造函数具有任何(有用的)效果吗?

例:

class A {
    public:
        explicit A( int b, int c ); // does explicit have any (useful) effect?
};

最佳答案

直到C++ 11,是的,没有理由在多参数构造函数上使用explicit

由于初始化列表,C++ 11中的情况发生了变化。基本上,使用初始化程序列表进行复制初始化(但不是直接初始化)要求不要将构造方法标记为explicit

例:

struct Foo { Foo(int, int); };
struct Bar { explicit Bar(int, int); };

Foo f1(1, 1); // ok
Foo f2 {1, 1}; // ok
Foo f3 = {1, 1}; // ok

Bar b1(1, 1); // ok
Bar b2 {1, 1}; // ok
Bar b3 = {1, 1}; // NOT OKAY

09-25 20:39