C++中的+++i

+++i在C++中会怎么解释呢?先不管对错纯粹讨论运算方式

按照能找到的最长的运算符开始解释

所以会解释成++(+i)

+++++i+++i++

按照分割 ++ ++ + i ++ + i ++  也就是++(++(+(i++)))+(i++) 首先进行i++操作,得到一个右值,该右值进行 +右值 操作 结果还是一个右值  在再进行++右值  报错

++++i+++i++

按照分割 ++ ++ i ++ + i ++ 也就是++(++(i++))+(i++)  首先进行i++,得到一个右值,该右值进行++右值操作,报错

可以改成(++++i)+++i++  这样的话 会进行  ((++(++i))++)+(i++)  首先进行++i得到一个左值,进行++左值又得到一个左值,再左值++运算得到一个右值 ,

右值+(i++)  右边的i++也是一个右值 ,所以结果就是右值+右值

当然实际不要这样写,因为无法确定运算顺序,所以实际结果各个平台不一致

(++++i)+++j++  这样是没问题的,因为这个对求值顺序没有要求

何为求值顺序

也就是C语言中没有规定是先进行(++++i)操作 还是先进行最后面的(i++)操作,这样对结果是有影响的

再譬如 (i++,i++)  这个表达式没问题,这里的逗号是顺序点,也就是会处理完前面的表达式再处理后面的,有先后求值顺序

而如果(i++)+(i++) 这种就是没有顺序点,没有先后顺序的

printf("%d%d",i++,i++) 这种也是有问题的,这里虽然有逗号,但是逗号作为的是分隔符,而不是运算符。

 

posted @ 2024-01-06 19:54  自由小菜园  阅读(16)  评论(0编辑  收藏  举报