左值,LValue:Location Value,并非Left Value。Location是指在内存中能够找到该变量的地址,即内存中一定有一个地方,存放了该变量。
右值,RValue:Read Value,并非Right Value。这种类型的变量是只读的,那是不是在内存中就不存在 存放该变量的地方呢?请看下面的程序:
/*
* =====================================================================================
*
* Filename: 1.cc
*
* Description: 左值,右值,临时变量和引用的测试
*
* Version: 1.0
* Created: 2013年05月08日 15时31分46秒
* Revision: none
* Compiler: gcc
*
* Author: XXL (), xxlblue@qq.com
* Organization: Southeast University
*
* =====================================================================================
*/
//func1测试临时变量,右值,返回值
int func1()
{
int a = 1, b;
b = a + 4;
a = a + b; // a+b产生了一个临时变量,但这个临时变量是否保存在内存中呢?
return b +3; // 返回值是是一个右值,也是个临时变量,但内存中是否为它开辟了空间呢?
}
//func2测试返回类型为引用,不建议返回局部对象的引用,这里只是用作测试
//注意,这里只能返回const类型的引用,因为只有常量引用才能绑定到右值
const int& func2()
{
int a = 3;
return a + 2; // a