// 后置++,返回自增前的值,且返回的是一个右值 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++++;