Peter G. Peter G. -4 years ago 111
C++ Question

Explicit constructor taking multiple arguments

Does making a constructor having multiple arguments

have any (useful) effect?


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

Answer Source

Up until C++11, yeah, no reason to use explicit on a multi-arg constructor.

That changes in C++11, because of initializer lists. Basically, copy-initialization (but not direct initialization) with an initializer list requires that the constructor not be marked 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
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download