Если у меня есть класс, содержащий:
foo(); //sets baz to 10
foo(int bar = 0); //sets baz to bar
int baz;
Будет ли когда-либо использоваться конструктор по умолчанию?
например будут:
foo qux;
по умолчанию baz = 0 или 10?
Любая разница для:
foo * quux = new foo;
Будет ли когда-либо использоваться конструктор по умолчанию?
Нет, вызов конструктора без указания аргумента будет просто двусмысленный. Компилятор просто не может сказать, является ли конструктор, принимающий аргумент без аргумента, предпочтительнее, чем конструктор, принимающий аргумент со значением по умолчанию, или наоборот. Ваш код не скомпилируется.
Любая разница для:
foo * quux = new foo;
Нет, та же история. Ничего не меняется, если вы создаете объект через new
, Компилятор все равно не сможет решить, какой конструктор вы собираетесь вызывать.
Это неоднозначный вызов. Таким образом, я не думаю, что это должно даже компилироваться. Компилятор не может решить, хотели ли вы вызвать foo::foo(int)
конструктор или конструктор по умолчанию, foo::foo()
,