【发布时间】:2014-09-19 09:27:19
【问题描述】:
我认为this question 有点被误解了。
返回const 值不能被视为毫无意义。正如 Adam Burry 在评论中指出的那样,Scott Meyers 在 More Effective C++(第 6 项)中推荐它,我将在其中添加 Herb Sutter 的 Exceptional C++(第 20 项,类Mechanics,对应的GotW是available online)。
这样做的基本原理是,您希望编译器能够捕捉到像 (a+b)=c(哎呀,意思是 ==)这样的拼写错误,或者像 a++++ 这样的误导性陈述,这两者都被标记为开箱即用对于像int 这样的原始类型。所以对于像operator+ 和operator++(int) 这样的东西,返回一个const 值确实有意义。
另一方面,正如已经指出的那样,返回 const 会阻止 C++11 的移动语义发挥作用,因为它们需要 非const 右值引用。
所以我的问题是,我们真的可以不吃蛋糕吗? (我找不到方法。)
【问题讨论】:
-
我认为返回
const的“优势”之前被夸大了。仅仅为了避免一些可能的错字而改变函数的语义似乎有点过头了。所以我想说,你连蛋糕都不想吃,它不是很好吃。 -
您可以使用引用限定符来限制您的
operator =等。 -
移动语义真的与
operator=的返回值相关吗?我想不出在编写良好的代码中它们会出现的任何情况。 (可以构建人工示例,但它们不会出现在编写良好的代码中。)
标签: c++ c++11 operator-overloading move-semantics