1


0

デフォルト値を持つ単一引数コンストラクターを暗黙的な型変換の対象にすることができますか

明示的なキーワードの使用を理解して、単一の引数コンストラクター、または最初の引数のみがデフォルト値を持たない複数の引数を持つコンストラクターで発生する暗黙的な型変換を回避します。

しかし、私は疑問に思っていましたが、デフォルト値を持つ単一の引数コンストラクタは、暗黙的な変換に関してはデフォルト値のないコンストラクタと同じように動作しますか?

1 Answer


4


デフォルト値が存在しても、単一引数のアクターが暗黙的な変換に使用されることを停止するわけではありません。それを停止する場合は、「明示的」を追加する必要があります。

例えば…​:

#include

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
$

正しく、つまり、暗黙的に「struct X」になる「int」を_want_した場合。 `= 23`部分、つまり コンストラクターの1つの引数のデフォルト値は、これをブロックしません。