1

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

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

4

1 に答える 1

4

デフォルト値が存在しても、単一引数のコンストラクターが暗黙の変換に使用されるの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
$ 

正しく、つまり、暗黙的になりたい場合。パーツ、つまりコンストラクターへの1つの引数のデフォルト値は、これをブロックしません。intstruct X=23

于 2010-05-05T17:09:04.113 に答える