可以这么理解: ++ 和 ?:
首先对于i++的实现是:
int temp;
temp = i;
i = i+1;
return temp;
而++i的实现是:
i = i+1;
return i;
该部分思路来自于(C语言 a++为什么不能作为左值?_JCRunner的博客-CSDN博客)
a++的运算结果并不是a这个变量的引用,而是一个临时变量,其值为i的值,所以你无法进行以下运算:
a++=5; 甚至编译器不允许你对一个临时变量重新赋值,上面的表达式会引起编译错误 。
左值就是可以在"="左边,能被赋予值的东西;右值则是在"="右边,可以赋值给别人的东西。所以左值必须是有内存空间的东西;而右值则既可以是变量,也可是常量和某种表达式,只要能提供一个值即可。
结合律只用于表达式中同一个对象左右出现两个相同优先级的操作符的情况,用于消除歧义。相当于添加()来调节优先级,优先级不同时按优先级运行,结合律可以忽略
思路来自:(a+++++b表示什么含义 - arrow' - 博客园)
综上所述,为什么a+++++b会编译错误呢?
1.c = a+++++b;//这样写会编译错误,首先,++比+更被优先识别,
所以相当于a++ ++ +b,即((a++)++)+b,而a++不能作为左值(左值才可以)
2.再举一个例子:c = a++++b;//这样就会编译错误,因为这相当于((a++)++)b,这没有意义
3.再举一个例子:c = ++a++;因为++运算符是右结合性的,所以相当于++(a++),a++不是一个左值,无法被修改,因此会编译错误
这篇文章帮助理解三目运算符:相当详细!
关于C++条件运算符(三目运算符)右结合的说明_weixin_30555753的博客-CSDN博客
这是一个具有参考意义的一篇文章,虽然是讲c++,但是个人认为可以帮助理解