c – 右值参考参数变为左值
发布时间:2020-12-16 10:09:35 所属栏目:百科 来源:网络整理
导读:请考虑以下代码: class a {public: int a;};void func1( a var1 );void func2( a var2 ){ func1(var2);} 在尝试编译它时,gcc返回以下内容: question.cpp: In function ‘void func2(a)’:question.cpp:10:14: error: cannot bind ‘a’ lvalue to ‘a’ fu
请考虑以下代码:
class a { public: int a; }; void func1( a &&var1 ); void func2( a &&var2 ) { func1(var2); } 在尝试编译它时,gcc返回以下内容: question.cpp: In function ‘void func2(a&&)’: question.cpp:10:14: error: cannot bind ‘a’ lvalue to ‘a&&’ func1(var); ^ question.cpp:6:6: error: initializing argument 1 of ‘void func1(a&&)’ void func1( a &&var ); ^ 似乎var2是一个左值,尽管它被明确定义为右值引用.一旦分配,双&符号是否会失去意义?在这里工作的机制是什么? 解决方法
没有机制在起作用,只有定义. var2是表示变量的标识符.当用作表达式时,它变为id-expression,其值类别定义如下,在5.1.1 [expr.prim.general] / 8中
变量var2具有对a的类型rvalue引用 var2,表达式,具有类型a和值类别lvalue (你不是第一个混淆rvalues和rvalue引用的人) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- PostgreSQL's read only transaction mode
- ruby-on-rails – 如何检查一个ActiveRecord类是否属于另一
- NoSQL数据库的四大分类的分析
- 正则表达式 – 用R中的单词拆分字符串
- ruby – 从命令行传递绑定或参数到ERB
- postgresql – 将文本表示中的十六进制转换为十进制数
- react-native – 在将反应导航更新到v3后,undefined不是对象
- cocos2d_x_08_游戏_FlappyBird
- vb.net – 将If运算符的结果赋给System.Nullable类型
- c# – 对于一个只能包含唯一项目但在99%的时间内包含0或1项