您当前的位置: 首页 >  c++

惊鸿一博

暂无认证

  • 5浏览

    0关注

    535博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++_你真的知道++i 和 i++的区别吗?_左值/右值/右值引用

惊鸿一博 发布时间:2021-07-19 21:29:03 ,浏览量:5

目录

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             
关注
打赏
1663399408
查看更多评论
0.4327s