研一寒假C++复习笔记--左值和右值的理解和使用

左值和右值是C++中的概念,左值表示可寻址的,可以读写,如变量;右值表示只读,如临时对象。左值可以出现在赋值表达式的两边,右值只能在右边。非const引用只能绑定到左值,不能绑定到函数返回的右值。示例代码展示了这一规则。
摘要由CSDN通过智能技术生成

目录

1--左值和右值的定义

2--简单理解左值和右值的代码

3--非const引用只能接受左值


1--左值和右值的定义

左值:L-Value,L理解为 Location,表示可寻;

右值:R-Value,R理解为 Read,表示可读;

        左值和右值是相对于赋值表达式(=)而言的,左值可以出现在等号表达式的左边和右边,而右值只能出现在等号表达式的右边;

        左值可以理解为一个内存地址值,通过这个内存地址,用户可以进行读和写的操作;右值可以理解为一个真实数据值,只能进行读的操作;简单理解左值为地址值,右值为数据值,即右值指的是引用了一个存储在某个内存地址的数据

        一个简单区分左值和右值的方法是,如果可以利用 & 符号对表达式取地址,则为左值,反之为右值;

2--简单理解左值和右值的代码

int a, b;
b = 0;
a = b;

        赋值表达式 b = 0 可以理解为:取 b 的左值,即 b 对应的内存地址值;取 0 的右值,即数值0;

        赋值表达式 a = b 可以理解为:取 a 的左值,取 b 的右值,本质上 b 还是一个左值;

3--非const引用只能接受左值

# include <iostream>
 
int func(){
    int i = 1;
    std::cout << "func()" << std::endl;
    return i;
} 
int main(){
    int i = 1;
    const int& i_cref1 = i;  // 正确
    const int& i_cref2 = func(); // 正确

    int& i_ref1 = i; // 正确,这里 i 是一个左值

    // 非const引用只能接受左值,而func()返回的是一个右值
    int& i_ref2 = func(); // 错误 
}

        上面的代码中,int& i_ref2 = func(); 是错误的,因为 int& 是一个非const的引用,即非常量引用,只能接收左值;而函数 func() 返回的是一个右值;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值