-1

私は本でこれを読みました:

メンバーに削除された、またはアクセスできないコピー代入演算子がある場合、またはクラスに const または参照メンバーがある場合、合成されたコピー代入演算子は削除済みとして定義されます。

また、参照型を使用できないのはなぜですか?

4

1 に答える 1

1

あなたはデフォルトのコンストラクターについて話している(再割り当てやコピーコンストラクターではありません)。

型が明示的に既定のコンストラクターを定義していない 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` 値を初期化する可能性がある (および初期化する必要がある) ため、コピー コンストラクターにはこの制限がないことに注意してください。

于 2014-08-31T15:41:00.100 に答える