2 wddpfx wddpfx 于 2016.03.05 08:57 提问

关于函数参数左值与右值?

这里:
string s1("hi"),s2,s3;
s2=std::move(string("bye"));//正确:从一个右值移动数据
s3=std::move(s1);
书上说:在s2中传递给move的实参是string的构造函数的右值结果——string("bye")。
那可不可以直接传递"bye" 呢?这样传递的是一个左值还是右值?

5个回答

WinsenJiansbomber
WinsenJiansbomber   2016.03.05 11:56

应该化简一下用语:左值 就是数值,不能赋值;右值是变量,可以赋值。不要被术语玩死了。

WinsenJiansbomber
WinsenJiansbomber 回复wddpfx: 对,反正是语言表达凌乱了
接近 2 年之前 回复
wddpfx
wddpfx 你说反了。
接近 2 年之前 回复
u013596119
u013596119   Rxr 2016.03.05 09:41

不可以直接传“bye”,因为直接传“bye”默认的type是char [],所以加string()是构造一个string类型的“bye”

WinsenJiansbomber
WinsenJiansbomber   2016.03.05 11:55

这个好凌乱啊,左值 ,右值,左手右手都快分不出来了。

WinsenJiansbomber
WinsenJiansbomber   2016.03.05 12:11

语言组织都凌乱了,基本概念是:左值 就是等号左的值,如果是数值,就不能赋值,出现赋值的情况就有问题;右值可以是变量或数值,都没有问题。

lvalue=rvalue

而扩展开来,有一个类a和返回数值的成员b那么下面表达式中,i 是一个左值,a也是一个左值,b 是一个右值,因为有点号操作符,在左边的就是左值,右边的就是右值

int i = a.b();

C++本来就已经够复杂的了,C++11引入的std::move希望不要增加这种额外的负担,否则这样的语言就应该叫蛋痛语言了。

oyljerry
oyljerry   Ds   Rxr 2016.03.05 16:09

你需要一个string类型的右值就可以move

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!