Наличие значения по умолчанию не останавливает использование ctor с одним аргументом для неявного преобразования: вам нужно добавить explicit
, если вы хотите остановить это.
Например ...:
#include <iostream>
struct X {
int i;
X(int j=23): i(j) {}
};
void f(struct X x) {
std::cout << x.i << std::endl;
}
int main() {
f(15);
return 0;
}
компилируется и работает правильно:
$ g++ -Wall -pedantic a.cc
$ ./a.out
15
$
правильно, то есть, если вы хотите, чтобы и int
стали неявно struct X
. Часть =23
, то есть значение по умолчанию для одного аргумента конструктора, не блокирует это.