等号左边的值就是左值,能够取地址的,有名字的就是左值。
等号右边的值就是右值,不能取地址的,无名字的就是右值。
右值包括字面常量(C风格字符串除外,它标识的是地址)、诸如x+y的表达式、以及返回值的函数(该函数返回的不能是引用)。
引入右值引用最大的目的是为了实现移动语义。下一个博客说移动语义。
rvref.cpp源代码如下:
// rvref.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
inline double f(double tf) { return 5.0 * (tf - 32) / 9.0; };
int main()
{
// std::cout << "Hello World!\n";
using namespace std;
double tc = 21.5;
double && rd1 = 7.07;
double&& rd2 = 1.8 * tc + 32;
double&& rd3 = f(rd2);
cout << "tc value and address :" << tc <<", "<< & tc << endl;
cout << "rd1 value and address :" << rd1 << ", " << &rd1 << endl;
cout << "rd2 value and address :" << rd2 << ", " << &rd2 << endl;
cout << "rd3 value and address :" << rd3 << ", " << &rd3 << endl;
}
运行结果:
tc value and address :21.5, 0136FC50
rd1 value and address :7.07, 0136FC34
rd2 value and address :70.7, 0136FC18
rd3 value and address :21.5, 0136FBFC