目录
1 基本概念
2 左值
3 右值
4 左值引用
5 右值引用
参考
1 基本概念C++ Primer 第五版13.6.1 P471: 左值持久,右值短暂。
2 左值左值 lvalue(又称 locator value):代表一个在内存中占有确定位置的对象(换句话说就是有一个地址,一个对象)。(如 int a; a+1 =2; 这里的(a+1)表示:表达式的临时结果,没有确定的内存空间(换句话说,它们只是计算的周期驻留在临时的寄存器中)。
变量是左值 变量可以看做一个运算对象(没有运算符的表达式)返回左值的例子: 例子:变量赋值,返回引用的函数,下标,解引用,前置递增递减,都是返回左值的表达式的例子。左值引用(常规引用,区别于右值引用) 当然可以作为左值了。
int a = 10;
int b = 20;
a = b; //变量赋值,a是左值,b作为右值
//int c = ++(a++);//err: 后置加减返回的是右值(常量11),右值自身运算无意义。
int d = ++(++a);//ok: 前置加减返回的是左值(变量a),左值可以继续运算。
int arr[10];
arr[0] = 6; //下标
*(arr+2) = 7;//ok: arr是变量,*(arr+2)虽有运算符,但解引用后成为一个变量,是左值,
//*arr + 3 = 8;//err: *arr是解引用,成为一个变量,是左值, *arr+3是右值表达式,因为有运算符
//-----//返回引用的函数 (当右值)---------------------------
int& func() {
int tmp = 10;
tmp = 10 * tmp;
return tmp;//ok
//return &tmp; //err,返回的是临时变量的地址,无意义。
}
int e = func(); //返回引用当右值
//------//返回引用的函数 (当左值)---------------------------
// 除了 赋值运算操作符(operator=)外,还有如下情况
char &get_val(srting &str, string::size_type ix)
{
return str[ix];
}
int main()
{
string s("a string");
cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?