C++中的右值
标签(空格分隔): Cpp
右值的特性
I’m going to talk about rvalue references, which enable two different things: move semantics and perfect forwarding.
在C++98/03中的左值和右值
Every expression is either an lvalue or an rvalue.任何一个语句不是左值就是右值。注意,左值和右值说的是语句的属性而不是对象。
左值都比语句的生存期长,比如:obj,ptr,ptr[index],++x等都是左值。
右值都是临时的,并且在语句结束的位置会被清除,比如:1729,x+y,std::string("memw"),x++等都是右值。
注意到x++和++x的不同。假设一个有int x = 0;那么语句x就是一个左值,是一个持久化对象。而++x也是一个左值,因为++x修正了原来的持久化对象x。但是x++是一个右值,因为x++复制了持久化对象x的值,然后修改持久化对象x,返回复制,而这份复制是临时的。虽然x++和++x都修改了x的值,但是他们的返回是不同的。因此,左值和右值并不关心语句做了什么,而只关心这个语句是持久化的还是临时的。*
在此输入正文