// 后置++,返回自增前的值,且返回的是一个右值 const int operator++(int){ int temp(*this); *this += 1; return temp; }
我是在看一本书上看到的,返回类型是const的,随后百度看了下,发现大家博客写的大多也是返回const,我有点想不通,为何?去掉const又何妨呢?
业精于勤,荒于嬉;行成于思,毁于随。
類別作者這樣寫是想強調傳回的結果僅作為值來使用,而不允許將結果作為物件進行修改操作。去掉const就不再有這個限制,例如可以寫cout << (a++).modify()而不會被編譯器擋住。
const
cout << (a++).modify()
繼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++++;
1++; int a = 2; a++++;
類別作者這樣寫是想強調傳回的結果僅作為值來使用,而不允許將結果作為物件進行修改操作。去掉
const
就不再有這個限制,例如可以寫cout << (a++).modify()
而不會被編譯器擋住。繼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++++;