問題タブ [rule-of-zero]

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 投票する
0 に答える
63 参照

c++ - ルール 5 - 代入演算子なしでコンパイル

配列であるメンバーを扱うときの移動演算子を理解するために、次の開発テストを作成しました。

代入または移動代入演算子を実装しないことで 5 のルールに違反しているのに、なぜこれが機能したりコンパイルしたりするのでしょうか?

現在、Visual Studio 2015 を使用しています。

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

c++ - ゼロのルール - デフォルトのコンストラクターは生成されません

私はこれを読んでいました: https://en.cppreference.com/w/cpp/language/rule_of_three

そして、これからの私の理解は、仮想デストラクタを持つ基本クラスが必要な場合は、5 つの特殊関数 (0 セクションのルールから抽出) をすべて定義する必要があるということです。

ただし、そのクラスをインストールしようとすると、「デフォルトの c'tor が作成されていません」というエラーが表示されます。

次に、デフォルトを生成すればOKです:

しかし、これが必要であることをまったく理解していなかったので、なぜそこにないのか混乱しています。コンパイラがデフォルトのコンストラクターを生成しない唯一の理由は、デフォルト以外のコンストラクターを指定した場合だと思いまし...

デフォルトの c'tor を指定する必要がある場合、例のクラスは構築できません。これは奇妙に思えます。

これが私の完全なライブ例へのリンクです: https://godbolt.org/z/qPvjd6r51


https://en.cppreference.com/w/cpp/language/default_constructorから:

暗黙的に宣言されたデフォルト コンストラクター

クラス型 (構造体、クラス、または共用体) に対してユーザーが宣言した任意の種類のコンストラクターが提供されていない場合、コンパイラは常に、既定のコンストラクターをそのクラスのインライン パブリック メンバーとして宣言します。

base_of_five_defaults(const base_of_five_defaults&) = default;これは、が宣言されている場合、「デフォルト」であってもユーザー宣言と見なされることを意味すると思いますか?