欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

左值与右值

程序员文章站 2022-03-07 08:45:53
左值与右值? 左值(L-value)与右值(R-value),二者之间的区别是什么? 左值与右值 01 这两个术语是多年前由编译器设计者所创造并沿用至今的,尽管它们的定义并不与C语言严格吻合。 02 左值就是那些可以出现在赋值符号左边的东西;右值就是那些可以出现在赋值符号右边的东西。 这样的解释有些 ......

左值与右值?

左值(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 左值与右值

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

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