これは、クラスの初期化がどのように機能するかを理解するための私の試みです。私はすべてについて確信が持てないので、この質問をしているのです。これは、次のことを行うときに起こると私が信じていることです。
T t = u;
T
from型のオブジェクトを構築しますu
。これは次のようになります。T t = T(u);
コピー コンストラクターを呼び出します。
T t( T(u) );
さて、2番目は私が理解していない部分です。T t = u
に作られたどこかで読みましたT t(T(u))
。しかし、それが本当なら、なぜこれは「コピーコンストラクタ」を出力しないのですか:
struct T
{
template <class U>
T(U) {
std::cout << "constructs an object of type T...\n";
}
T(T const &)
{
std::cout << "copy-constructor";
}
T& operator=(T const &)
{
std::cout << "assignment operator"; return *this;
}
T() = default;
};
int main()
{
T t(T(5));
}
実際には、これが行うのは print が「型 T のオブジェクトを構築する」ことだけです。ここでコピーコンストラクターが呼び出されないのはなぜですか? のコンストラクターに渡されるT(5)
タイプのオブジェクトにすることができるため、適切なコンストラクターを呼び出すべきではありません。T const &
T
これについての洞察が本当に欲しいです。私はしばらくの間、これを理解しようとしてきました。