| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1607 人关注过本帖
标题:绑定到左值的右值引用问题
只看楼主 加入收藏
韩海0312
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2012-8-11
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:3 
绑定到左值的右值引用问题
程序代码:
int &&rref = 8; //右值引用
int &&r2 = rref;                //(a)  // error, rref是个左值

class  A {
public:
A()=default;
A(A&& a) {/*...*/};             //(b)
//...
};

A aa = std::move(A());          //(c)
问题描述
std::move 返回的右值引用, 表达式(a)实际调用移动构找函数(b)
相当与,移动构造函数的参数右值引用a绑定到std::move 返回的右值引用上,
可是我们知道,右值引用是不能绑定到左值上的

上述调用是可行的,但是为什么右值引用可以绑定到右值引用上呢?
搜索更多相关主题的帖子: color 
2017-06-20 01:31
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:20 
又没听懂
你为什么认为 A aa = std::move(A()); 是错的呀

2017-06-20 08:47
韩海0312
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2012-8-11
收藏
得分:0 
回复 2楼 rjsp
我知道这是对的,但是按规则好像解释不通

std::move() 返回右值引用(右值引用是左值, 例如int &&cc = 11; cc是左值),
然后调用移动构造函数,移动构造函数的右值引用参数a绑定到std::move() 返回的右值引用上

有点像下面的东西

int &&bb = 10;
int &&ss = bb; /这是错误的,因为是bb个左值,(右值引用绑定到右值的引用这是不可以的)
2017-06-20 10:10
韩海0312
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2012-8-11
收藏
得分:0 
回复 2楼 rjsp
找到答案了
程序代码:
Things that are declared as 有了右值引用,C++11增加了move构造和move赋值。考虑这个情况:
void foo(X&& x)
{
  // ...
}

那么问题来了,x的类型是右值引用,指向一个右值,但x本身是左值还是右值呢? C++11对此做出了区分
:Things that are declared as rvalue reference can be lvalues or rvalues.
The distinguishing criterion is: if it has a name, then it is an lvalue. Otherwise, it is an rvalue.
2017-06-20 10:43
快速回复:绑定到左值的右值引用问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017197 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved