Может ли конструктор с одним аргументом со значением по умолчанию подвергаться неявному преобразованию типов - PullRequest
1 голос
/ 05 мая 2010

Я понимаю использование явного ключевого слова, чтобы избежать неявных преобразований типов, которые могут происходить с конструктором с одним аргументом или с конструктором, который имеет несколько аргументов, из которых только первый не имеет значения по умолчанию.

Однако мне было интересно, ведет себя ли конструктор с одним аргументом со значением по умолчанию так же, как конструктор без значения по умолчанию, когда речь идет о неявных преобразованиях?

1 Ответ

4 голосов
/ 05 мая 2010

Наличие значения по умолчанию не останавливает использование 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, то есть значение по умолчанию для одного аргумента конструктора, не блокирует это.

...