c++ - 后置++重载返回类型为何是const类型的?
迷茫
迷茫 2017-04-17 15:22:22
0
3
624
// 后置++,返回自增前的值,且返回的是一个右值
const int operator++(int){
    int temp(*this);
    *this += 1;
    return temp;
}

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

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回覆(3)
Ty80

類別作者這樣寫是想強調傳回的結果僅作為值來使用,而不允許將結果作為物件進行修改操作。去掉const就不再有這個限制,例如可以寫cout << (a++).modify()而不會被編譯器擋住。

PHPzhong

繼C++11:

內建後增表達式是prvalue。標準規定非類非數組的prvalue不會是const/volatile修飾的。 int operator++(int);在被呼叫時是prvalue,給這個回傳值型別加const是多餘(書上可能在亂寫)。一般說來,操作符重載要保持與內建版本的操作符語意相似,所以後增為prvalue就行。

阻止prvalue呼叫非const成員函式請用ref-qualifier,例 auto modify() &;

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

洪涛

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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板