私は本でこれを読みました:
メンバーに削除された、またはアクセスできないコピー代入演算子がある場合、またはクラスに const または参照メンバーがある場合、合成されたコピー代入演算子は削除済みとして定義されます。
また、参照型を使用できないのはなぜですか?
私は本でこれを読みました:
メンバーに削除された、またはアクセスできないコピー代入演算子がある場合、またはクラスに const または参照メンバーがある場合、合成されたコピー代入演算子は削除済みとして定義されます。
また、参照型を使用できないのはなぜですか?
あなたはデフォルトのコンストラクターについて話している(再割り当てやコピーコンストラクターではありません)。
型が明示的に既定のコンストラクターを定義していない const メンバー
デフォルトのコンストラクターを禁止します。そうしないと、初期化されていない const 値が使用されます (役に立たない)。(そうでない場合const
、初期化されていないという事実は問題ではありません。後で割り当てることができます)。
クラス内初期化子を持たない参照メンバー
参照は非 null const ポインターに似ているため、これも禁止されています。
struct NoDefaultConstructor
{
// No default constructor can be generated.
const int i; // which value to set by default ?
int& r; // reference which object by default?
};
struct InClassInitializerSoDefaultConstruct
{
// default constructor is generated here.
const int i = 42;
int j;
int& r = j;
};
編集されたQに答えるために編集
割り当ての場合、const
値は変更できません。および参照は、null でない const ポインターのようなものです。
const` 値を初期化する可能性がある (および初期化する必要がある) ため、コピー コンストラクターにはこの制限がないことに注意してください。