使具有多个参数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