問題タブ [copy-initialization]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - コピー リストの初期化は概念的にコピー ctor を呼び出しますか?
C++11 より前では、 A a = 1;
which と多かれ少なかれ同等のようなものを書くことで、コピーの初期化を行うことができましたA a = A(1);
。つまり、最初にテンポラリが作成され、次にコピー ctor が呼び出されます。コピーの省略に関係なく、これは概念的にそうでなければならず、コピー ctor にアクセスできる必要があります。
C++11 のリストの初期化では、 と書くことでコピー リストの初期化を行うことができますA a = {1, 2};
。私の意見では、これは とほぼ同等であるはずA a = A(1, 2);
です。ただし、GCC と clang では、A a = {1, 2}
(private として宣言することにより) コピーおよび移動 ctor にアクセスできない場合でもコンパイルします。それでも、A a = 1;
対応するコピー/移動 ctor にアクセスできない場合、GCC または clang でコンパイルされません。したがって、直接リストの初期化とA a = {1, 2};
ほぼ同等のようです。A a{1, 2};
これと実際のダイレクト リストの初期化との違いは、A a = {1, 2};
2 つの int を取る ctor が明示的である場合はコンパイルされないことです。この点では、A a = {1, 2};
コピーの初期化に似ています。
だから、私の質問は次のとおりA a = {1, 2};
です。概念的には、表現の正確なセマンティクスは何ですか? 概念的には、コピー省略は邪魔になりません。
c++ - コピーコンストラクターで const を削除する
これは私がもともとやったことです。
しかし、クラス A を次のように少し変更すると (コピー コンストラクターの const を削除)、最終行でコンパイル エラーが発生するのはなぜですか? ありがとうございました