検索

ホームページ  >  に質問  >  本文

c++ - 后置++重载返回类型为何是const类型的?

// 后置++,返回自增前的值,且返回的是一个右值
const int operator++(int){
    int temp(*this);
    *this += 1;
    return temp;
}

我是在看一本书上看到的,返回类型是const的,随后百度看了下,发现大家博客写的大多也是返回const,我有点想不通,为何?去掉const又何妨呢?

迷茫迷茫2805日前618

全員に返信(3)返信します

  • PHP中文网

    PHP中文网2017-04-17 15:24:22

    クラスの作成者は、返された結果が値としてのみ使用され、結果をオブジェクトとして変更することはできないことを強調するためにこれを作成しました。 const を削除すると、この制限はなくなります。たとえば、コンパイラーによってブロックされずに cout << (a++).modify() を作成できます。

    返事
    0
  • PHPz

    PHPz2017-04-17 15:24:22

    C++11 以降:

    組み込みのポストインクリメント式は prvalue です。この標準では、非クラス、非配列の prvalue は const/volatile 変更されないことが規定されています。 int Operator++(int); を呼び出すと prvalue になります。この戻り値の型に const を追加するのは冗長です (本ではランダムに記述されている可能性があります)。一般に、演算子のオーバーロードは組み込みバージョンの演算子と同様のセマンティクスを維持する必要があるため、それを prvalue に追加するだけです。

    prvalue が非 const メンバー関数を呼び出さないようにするには、automodify() &;

    などの ref-qualifier を使用してください。

    const で変更された prvalue は、移動セマンティクスの防止など、非 const rvalue 参照と一致しません。これは、ほとんどの場合、実行時のオーバーヘッドが追加されるだけです。 const 値を返すことは廃止されました。

    返事
    0
  • PHP中文网

    PHP中文网2017-04-17 15:24:22

    私は長い間 C++ を書いていなかったので忘れていましたが、例を示します 1++; int a = 2; a++++;

    返事
    0
  • キャンセル返事