問題タブ [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.

0 投票する
1 に答える
583 参照

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};です。概念的には、表現の正確なセマンティクスは何ですか? 概念的には、コピー省略は邪魔になりません。

0 投票する
2 に答える
797 参照

c++ - コピーコンストラクターで const を削除する

これは私がもともとやったことです。

しかし、クラス A を次のように少し変更すると (コピー コンストラクターの const を削除)、最終行でコンパイル エラーが発生するのはなぜですか? ありがとうございました