左值是持续时间长,针对地址进行操作的,操作符为&
右值持续时间短,主要针对寄存器操作的,操作符为&&
有时候为了提升系统的性能,对对象进行移动操作,但是不要对其进行内容的复制或者内存的操作,那么就用右值,
有一根函数包含在<utility>头文件中的std::move()可以将左值转为右值
1、主要是练习了左值和右值的用法,这个再提升性能上有很大的帮助,因为对右值的操作是对寄存器的操作,实现了对内容的移动的时候不会造成资源的复制,
2、std::move可以将左值引用转为右值引用,只有移动没有内容的搬迁和内存的拷贝
3、左值具有持久性,右值具有短暂性
4、因为右值引用是c ++ 11的标准因此再用编译器编辑的时候要加上gnu++1y,完整的指令是 g++ 1.cc -o 11 -std = gnu++1y
#include <iostream>
#include <utility>
int main()
{
int i = 42;
std::cout << i << std::endl;
int &r = i;
std::cout << r << std::endl;
const int &rr = i;
std::cout << rr << std::endl;
const int &r3 = i*42;
std::cout << r3 << std::endl;
const int &r4 = i*42;
std::cout << r4 << std::endl;
int && r5 = i*42;
int r6 = std::move(r5);
std::cout << r6 << std::endl;
int && r7 = i*42;
std::cout << r7 << std::endl;
const int &r8 = i*42;
std::cout << r8 << std::endl;
}