C++表达式的副作用

来源:百度知道 编辑:UC知道 时间:2024/06/07 10:19:38
假设p=3
++(p++)
p++++
请问这两个表达式为什么是错的,请先把它们简化到不能简化的时候说明哪步开始是错的,谢谢

编译器在分析表达式时,按照贪吃的规则,只要能理解,就会尽量多的读取字符。
首先说一下:
左值一般是变量,能进行赋值,运算++等.
右值则一般是字面值,这时它是不能进行++等运算的(它相当于const,值不能改变的)当然左值也能做右值,它没有限制.
p++ :先将变量的值(不是本身实体)作为表达式的值,其实这里存在一个临时的变量(它是比较特殊的,不太好说,你可以在网上搜一下),再加一,所以它返回的是右值,不能进行++。
++p :先加一,在返回,故返回的是左值,可以进行++。
好了开始分析:
++(p++):p++返回右值,所以再进行++,就会出错
p++++ :道理一样,首先p++,返回右值,再进行++,就会出错
这是由于返回值类型造成的