右值引用
C++11后引入了右值引用等特性,用来支持移动语义和完美转发,在了解右值引用前,需要了解一些前置的概念
- 左值(lvalue)
左值字面意义是在等号左边的值,左值是寻址的,具名的,有标识符的
有一个特点是,所有声明的变量都是左值 - 右值(rvalue)
右值字面意义是在等号右边的值,右值不可寻址,不具名
具体而言:
- 一个整数字面量是右值,因为它不对应一个内存存储位置,在汇编中,它存在于指令中的立即数字段
- 一个临时对象是右值,临时对象是为了写连续的表达式而被编译器支持的,当有例如
func(obj())
时,首先建立一个obj对象,这个对象没有名字,它实际上有一个对于的内存存储位置,但在这行代码执行完后就会被销毁,所以它叫做临时对象
cpp对临时对象有一个限制,因为临时对象是马上就会被销毁的,所以对临时对象的修会被抛弃