たとえば、オブジェクトの初期化中にそれを研究しました
string s = "Hello world";
RHS が LHS 型オブジェクトに暗黙的に変換可能な場合、コピー コンストラクターが呼び出されます。char
しかし、私には、ポインタを引数として取るコンストラクタが呼び出されることを確信している友人がいchar
ます。
string s("Hello world");
あれは正しいですか?
たとえば、オブジェクトの初期化中にそれを研究しました
string s = "Hello world";
RHS が LHS 型オブジェクトに暗黙的に変換可能な場合、コピー コンストラクターが呼び出されます。char
しかし、私には、ポインタを引数として取るコンストラクタが呼び出されることを確信している友人がいchar
ます。
string s("Hello world");
あれは正しいですか?
やっている
string s = "Hello world";
と同等です
string s( string( "Hello world" ) );
そのため、コンストラクター取得char const*
とコピーコンストラクターの両方が呼び出されます。ただし、標準では、コピー コンストラクターの呼び出しが省略される(行われない)コピー省略が許可されます。
はいといいえ。どちらも呼ばれます。
string s = "Hello world";
これがコピーの初期化です。変換コンストラクターを呼び出して一時的なstring
from"Hellow world"
を構築し、その一時的なものをコピー コンストラクターで使用して を構築しs
ます。(最適化の対象)
string s("Hello world");
直接の初期化であり、変換コンストラクターを直接呼び出し、から構築s
し"Hello world"
ます。