1.概要
c++11 新特性 右值引用实验
右值就是=右边的值,那么右值有什么特点呢,就是没有引用或者指针指向,就是单纯的数据,赋值的时候一定是深拷贝。
上面的规则是针对c++98的,c++11后上面的规则在有些情况下会有效率问题,简单说就是有些时候右值也没有深拷贝的必要。于是给了一右值引用的符号“&&”,这样右值也有引用了,你就可以选择行的不执行深拷贝了。
如下我举了几种创建右值引用的方式。
- 1.用左值变,move就是c++11新添加的这么一个函数
- 2.字面值常量
- 3.函数返回值。
2.代码
#include <iostream>
using namespace std;
int fun() {
return 50;
}
int main()
{
//左值引用
int a = 10;
int& pa = a;
cout << "addr:" << &pa << " value:" << pa<<endl;
//右值引用 把一个左值变成右值
//int&& pb = a;//把一个左值复制给右值引用 失败
int&& pb = move(a);
cout << "addr:" << &pb << " value:" << pb << endl;
//通常 字面值常量是没有引用的,应是右值,但是在c++11后可以
int&& pc = 100;
cout << "addr:" << &pc << " value:" << pc << endl;
//左、右值引用对比 用函数返回值的方式创建一个右值引用
//int& pd = fun();
int&& pd = fun();
cout << "addr:" << &pd << " value:" << pd << endl;
cout << "Hello World!\n";
}
3.运行
addr:00000026258FFA54 value:10
addr:00000026258FFA54 value:10
addr:00000026258FFAD4 value:100
addr:00000026258FFB14 value:50
Hello World!