当然这种写法编译器肯定是会报错的,至于为什么报错呢,看下是如何解析的
对于这种表达式是按照从左往右尽可能读取最长的可以识别的标识符
所以最先读取到一个符号+,再往后也是一个符号+,那么组合起来就是++,而++是C++里面能识别出来的最长的一个符号,是一个自增运算符,如果再往后读一个字符就是+++了,这显然在C++中是没有这样的运算符,也无法作为变量的名称,所以从这里就可以分割开了,以次类推
++
++
+
i
++
++
+
j
++
++
组合起来其实就是(++(++(+((i++)++))))+((j++)++)
因为后自增运算符++优先级大于前+运算符 所以先(i++)++运算
i++是右值,求值完就结束了,无法再次++,所以会提示i++不是左值无法进行i++++操作
后面那个子表达式j++++也是因为这个问题
当然i+++j是可以,会解析成 (i++)+j
++++i+j++也是可以的,会解析成(++(++i))+(j++) ,++i是左值,所以可以再进行++操作
(++++i)+++j++ 也可以