加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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中

The result is the entity denoted by the identifier. The result is an lvalue if the entity is a function,variable,or data member and a prvalue otherwise.

变量var2具有对a的类型rvalue引用

var2,表达式,具有类型a和值类别lvalue

(你不是第一个混淆rvalues和rvalue引用的人)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读