2

たとえば、オブジェクトの初期化中にそれを研究しました

string s = "Hello world";

RHS が LHS 型オブジェクトに暗黙的に変換可能な場合、コピー コンストラクターが呼び出されます。charしかし、私には、ポインタを引数として取るコンストラクタが呼び出されることを確信している友人がいcharます。

string s("Hello world");

あれは正しいですか?

4

2 に答える 2

7

やっている

string s = "Hello world";

と同等です

string s( string( "Hello world" ) );

そのため、コンストラクター取得char const*コピーコンストラクターの両方が呼び出されます。ただし、標準では、コピー コンストラクターの呼び出しが省略される(行われない)コピー省略が許可されます。

于 2012-10-22T18:34:26.293 に答える
3

はいといいえ。どちらも呼ばれます。

string s = "Hello world";

これがコピーの初期化です。変換コンストラクターを呼び出して一時的なstringfrom"Hellow world"を構築し、その一時的なものをコピー コンストラクターで使用して を構築しsます。(最適化の対象)

string s("Hello world");

直接の初期化であり、変換コンストラクターを直接呼び出し、から構築s"Hello world"ます。

于 2012-10-22T18:33:58.040 に答える