搜尋

首頁  >  問答  >  主體

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

1

2

3

4

5

6

<code>// 后置++,返回自增前的值,且返回的是一个右值

const int operator++(int){

    int temp(*this);

    *this += 1;

    return temp;

}</code>

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

迷茫迷茫2821 天前634

全部回覆(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成員函式請用ref-qualifier,例 auto modify() &;

    而const修飾的prvalue不會匹配到非const的右值引用,例如阻止移動語義,而這在多數情況下只會帶來額外的運行時開銷。傳回const的值已經過時了。

    回覆
    0
  • PHP中文网

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

    好久沒寫C++,有點忘了,不過可以說個例子 1++; int a = 2; a++++;

    回覆
    0
  • 取消回覆