我认为this question有点被误解了。
返回const
值并不是可以被视为无意义的东西。正如Adam Burry在评论中指出的那样,Scott Meyers在更有效的C ++ (第6项)中推荐它,我将添加Herb Sutter的 Exceptional C ++ (第20项,类力学,其相应的GotW是available online)。
执行此操作的基本原理是您希望编译器捕获类似(a+b)=c
(oops,意为==
)或误导性语句(如a++++
)的拼写错误,这两种语句都被标记出来像int
这样的原始类型的盒子。因此对于operator+
和operator++(int)
之类的内容,返回const
值确实有意义。
另一方面,正如已经指出的那样,返回const
会阻止C ++ 11移动语义,因为它们需要非 { {1}}右值参考。
所以我的问题是,我们真的不能吃蛋糕吗? (我找不到办法。)
答案 0 :(得分:10)
你可以做什么而不是返回const元素是将方法限制为左值对象:
struct S
{
S& operator =(const S& rhs) & // note the final &
// to restrict this to be lvalue
{
// implementation
return *this;
}
};
所以用
S operator +(const S& lhs, const S& rhs);
S a, b, c;
以下是非法的:
(a + b) = c;