左值与右值

左值与右值?

左值(L-value)与右值(R-value),二者之间的区别是什么?

左值与右值

01

这两个术语是多年前由编译器设计者所创造并沿用至今的,尽管它们的定义并不与C语言严格吻合。

02

左值就是那些可以出现在赋值符号左边的东西;右值就是那些可以出现在赋值符号右边的东西。

这样的解释有些脱下裤子放屁的意思,通过名称我们也能得出左值和右值的意思,那么应该出现在赋值符号左边的东西是什么呢?

03

1. a = b + 1;

2. b + 1 = a;

在语句1中,a是一个左值,因为它标识了一个可以存储结果值的地点;b + 25是个右值,因为它指定了一个值。

那么,能像语句2一样,互换左右值的位置吗?

原先用作左值的a此时也可以作为右值,因为每个位置都包含一个值。然而,b + 25无法作为一个左值,因为它并未标识一个特定的位置。因此,语句2是非法的。

04

int a = 5;
++(a++);

如果尝试执行此段代码,则会出现如下报错

main.c:4:2: error: expression is not assignable
        ++(a++);
        ^ ~~~~~
1 error generated.

报错的意思为: 表达式不可赋值

++(a++)拆解,++(a = a + 1) -> ++(5) -> 5 = 5 + 1。拆解之后,很容易就能发现问题所在。5是一个常量,它无法被赋值为6。

05 左值与右值

左值: 是指用于识别或定位的一个标识符,同时左值还必须是可以被改变的

右值: 任何可以被读取的值都是右值(非左值)

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 左值与右值