![c – 返回const值以利用移动语义与防止诸如(a b)= c之类的东西[复制],第1张 c – 返回const值以利用移动语义与防止诸如(a b)= c之类的东西[复制],第1张](/aiimages/c+%E2%80%93+%E8%BF%94%E5%9B%9Econst%E5%80%BC%E4%BB%A5%E5%88%A9%E7%94%A8%E7%A7%BB%E5%8A%A8%E8%AF%AD%E4%B9%89%E4%B8%8E%E9%98%B2%E6%AD%A2%E8%AF%B8%E5%A6%82%28a+b%29%3D+c%E4%B9%8B%E7%B1%BB%E7%9A%84%E4%B8%9C%E8%A5%BF%5B%E5%A4%8D%E5%88%B6%5D.png)
我认为 this question有点被误解了.
返回const值不是可以被视为无意义的东西.正如Adam Burry在评论中指出的那样,Scott Meyers在更有效的C(第6项)中推荐它,我将添加Herb Sutter的例外C(第20项,类力学,其相应的GotW是available online).
这样做的理由是你希望编译器捕获类似于(ab)= c(oops,意思是==)的错别字,或像a这样的误导性语句,这两种语句都被标记为开箱即用的原始类型,如INT.因此对于像operator和operator(int)这样的东西,返回一个const值确实有意义.
另一方面,正如已经指出的那样,返回一个const可以防止C 11的移动语义被踢入,因为它们需要一个非const rvalue引用.
所以我的问题是,我们真的不能吃蛋糕吗? (我找不到办法.)
解决方法 你可以做什么而不是返回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;
Live example
总结以上是内存溢出为你收集整理的c – 返回const值以利用移动语义与防止诸如(a b)= c之类的东西[复制]全部内容,希望文章能够帮你解决c – 返回const值以利用移动语义与防止诸如(a b)= c之类的东西[复制]所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)