If I have a class containing:
foo(); //sets baz to 10
foo(int bar = 0); //sets baz to bar
int baz;
Will the 'default' constructor ever be used?
e.g. will:
foo qux;
default to baz = 0 or 10?
Any difference for:
foo * quux = new foo;
If I have a class containing:
foo(); //sets baz to 10
foo(int bar = 0); //sets baz to bar
int baz;
Will the 'default' constructor ever be used?
e.g. will:
foo qux;
default to baz = 0 or 10?
Any difference for:
foo * quux = new foo;
Will the 'default' constructor ever be used?
No, a constructor call specifying no argument will simply be ambiguous. The compiler just cannot tell whether the constructor accepting no argument is preferable to the constructor accepting an argument with a default value, or vice versa. Your code won't compile.
Any difference for:
foo * quux = new foo;
No, same story. Nothing changes if you are creating the object through new
. The compiler will still be unable to decide which constructor you intend to call.
This is an ambiguous call. As such, I don't think it should even compile. The compiler can't decide whether you meant to call the foo::foo(int)
constructor or the default constructor, foo::foo()
.