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++) 这种也是有问题的,这里虽然有逗号,但是逗号作为的是分隔符,而不是运算符。