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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C语言指针以及区分左值和右值的技巧(整理)
看了一下自己的资源,下载了很多,实在不好意思,整理一份发一下。 Android开发高效率的还是依靠NDK,所以C语言学习一下也是有必要的。Android内核还是Linux所以本分分类放在了Linux这里。其实我是想放到OS Android里面对的,但是没有这个目录。 整理了C开发的一些资源。也有一些注释和精简。 C语言主要就是指针,其中的三篇文章是我阅读相关内容获得最大启发的三篇文字。都是baidu搜索来的,希望你也能抽空把C语言的基础打扎实。
左值和右值
左值和右值
无限级分类/多级分类【左右值方式实现】
无限级分类/多级分类【左右值方式实现】,压缩包中mysql.db.sql是MySQL建表及初始化SQL,index.php文件前几个行是数据库连接的参数。
左值与右值的引用
这是关于C++左值与右值引用的课程视频,课程易于理解,可以很快掌握
非常量引用的初始值必须为左值的问题
非常量引用的初始值必须为左值的问题 C++ 11中引入的一个非常重要的概念就是右值引用。理解右值引用是学习“移动语义”(move semantics)的基础。而要理解右值引用,就必须先区分左值与右值。 对左值和右值的一个最常见的误解是:等号左边的就是左值,等号右边的就是右值。
c++重载增量运算符
重载增量运算符在运用中的总结,主要左值与右值的区别
web页面的左右互换
在网站操作web页面时 对于文本框 左右值的互换
SQL Server 存储层级数据实现无限级分类,左右值分类
SQL Server 存储层级数据实现无限级分类,非递归存储过程无限级分类,左右值分类
函数参数的传递和值返回
C/C++语言常混淆的问题,函数参数的传递和值返回,参照。
C++通用模板库
包括: 自动指针CAutoPtr『支持多元素,赋值时会完全把右值传给左值』 智能buffer CSmartBuf『用于在堆栈中定义未知大小的buffer,兼具高效和通用性』 快速映射CQuickMap 环形队列CRingQueue