コピー コンストラクターのウィキペディア ページから:
X a = X();
// valid given X(const X& copy_from_me) but not valid given X(X& copy_from_me)
// because the second wants a non-const X&
// to create a, the compiler first creates a temporary by invoking the default constructor
// of X, then uses the copy constructor to initialize as a copy of that temporary.
// For some compilers both versions actually work but this behaviour should not be relied
// upon because it's non-standard.
具体的には次の部分です。
" コンパイラは、最初に X の既定のコンストラクターを呼び出して一時オブジェクトを作成し、次にコピー コンストラクターを使用してその一時オブジェクトのコピーとして初期化します。"
私の質問は(これが正しいと仮定して)なぜそうなのですか?コードから、コンパイラは X を構築した後に代入演算子を使用すると推測できます。
割り当てが初期化と同じ式で行われるためだと思いますか?
X a;
また、通常の初期化やコピーしたい場合ではなく、この式を使用する理由は何X a(b);
ですか?