c – 返回const值以利用移动语义与防止诸如(a b)= c之类的东西[
发布时间:2020-12-16 04:54:14 所属栏目:百科 来源:网络整理
导读:参见英文答案 Isn’t the const modifier here unnecessary? 5个 我认为 this question有点被误解了. 返回const值不是可以被视为无意义的东西.正如Adam Burry在评论中指出的那样,Scott Meyers在更有效的C(第6项)中推荐它,我将添加Herb Sutter的例外C(第20项,
参见英文答案 >
Isn’t the const modifier here unnecessary? 5个
我认为 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 常用的正则表达式
- Node.js Express安装与使用教程
- quick-cocos2d-x 3.3 final 中cc.CardinalSplineTo:create导
- c# – 协方差比多态性更冷而不是冗余?
- c# – 在大型应用程序中使用MVVM – 共享视图模型,模型,状态
- SQLite入门与分析(四)---Page Cache之事务处理(2)
- React学习之扩展不变的数据(immutability-helper)优化(三
- c – 如何在不创建新对象的情况下引用substr?
- ajax与HTML5 history pushState/replaceState实例
- c# – 为什么没有Times.Always在Moq?