6

この質問 (C++03 の場合) について疑問があるので、ここに投稿します。変換コンストラクターについて読んだところ、次のように述べられています。

「変換コンストラクターになるには、コンストラクターは単一の引数を持ち、明示的なキーワードなしで宣言する必要があります。」

ここで私の質問は、明示的に宣言されていない場合、コピー コンストラクターを変換コンストラクターと呼ぶことができるかどうかです。1つになる資格はありますか?同じ型パラメーターのみを受け入れて変換を行わないため、変換コンストラクターと呼ぶことはできないと思います。例えば

foo a;
foo b;
a = 100; //a Conversion constructor would be called (i.e) foo(int a){...}
a = b ;  //Since both objects are same type and have been initialized the assignment operator will be called (if there is an overloaded version otherwise the default will be called)

私の理解は正しいですか?

4

2 に答える 2

10

標準の引用:

[class.conv.ctor]/3

非明示的なコピー コンストラクター (12.8) は、変換コンストラクターです。暗黙的に宣言されたコピー コンストラクターは、明示的なコンストラクターではありません。暗黙的な型変換のために呼び出される場合があります。

そうです、copy-ctor は変換 ctor です。

また、コメントで指定および指摘する [conv]/1 にも注意してください。

注: 標準の変換シーケンスは空にすることができます。つまり、変換を含まないものにすることができます。

そして /3 で:

宣言が整形式である場合にのみ、式eを暗黙的に型に変換できます。TT t=e;

したがって、暗黙的な変換のセットには空の変換が含まれます。

于 2013-08-23T14:49:26.873 に答える