c++中的后自增自减操作符为什么是Right结合性啊该怎么处理

c++中的后自增自减操作符为什么是Right结合性啊
像前自增是右结合性我还能理解 但是后自增为什么是右结合性呢 
也许是我不懂什么是结合性, 我想的是右结合性就是操作符和右边的操作数结合 ,从右向左结合
大牛们说说看呀

------解决方案--------------------
http://hi.baidu.com/leebame/blog/item/d06ce0cd539145510fb345cb.html
------解决方案--------------------
优先级和结合性说的都是操作数和哪边的操作符结合,先判断优先级,优先级一样再判断结合性。
------解决方案--------------------
[原创] 区分结合性和求值顺序
2007年02月22日 星期四 14:08
区分结合性和求值顺序

结合性:在几个操作符具有相同的优先级时决定先执行哪一个。每个操作符都拥有某一级别的优先级,同时也拥有左结合性或右结合性。优先级决定一个不含括号的表达式中操作数之间的“紧密”程度。但是,当许多操作符的优先级相同时,这时操作符的结合性就开始发挥作用了,由它决定哪个操作符先执行。所有的赋值操作符都具有右结合性(表达式中最右的操作最先执行)。结合性只用于表达式中出现两个以上相同优先级的操作符的情况,用于消除歧义。所有优先级相同的操作符,其结合性也一定相同,否则依然无法消除歧义。
求值顺序:操作符左右的执行顺序。在优先级和结合性规则确定哪些符号组成一个意群的同时,这些意群内部如何进行运算的次序仍是求定义的。只有四个操作符具有确定的求值顺序"&&", "||", "?:" , ", ",其中 &&和||中,先求左边的值再决定是否求右边的值; a?b:c中,先求a的值,然后根据a的值求b或c的值; 逗号表达式中先求左侧,然后左值被丢弃,再对右侧求值。(分隔函数参数的,并非逗号运算符,因此参数的求值顺序也不一定)。
例:func(x, y)中x,y的求值顺序不定;但func((x,y))中一定是先求x再求y。
由于C中其它操作符的求值顺序并未有具体的规定,导致了很多程序运行结果的不确定性,程序结果需要依赖于编译器的实现。C中之所以没有作确定的定义,是想让编译器充分利用自身架构的特点,或者充分利用存储于寄存器中的值。
如果一个程序的运行结果要依赖于编译器或其它外部条件,那肯定不是正确的程序。看来该加括号的地方应该用括号来规定他们的求值顺序。
例子:
#include <stdio.h>
void main()
{
int a=5;
if(a++ > a++){
 printf("a++ > a++, a:%d\n", a);
}
if(a++ < a++){
printf("a++ < a++, a:%d\n", a);
}
if(a++ == a++){
printf("a++ == a++, a:%d\n", a);
}
printf("end a:%d\n",a);
if((printf("left\t")) < (printf("right\t"))){
printf("ok\n");
}
}
这个程序输出结果是什么?
VC++6.0中:
a++ == a++, a:11
end a:11
left right ok
Linux中,gcc3.2.2:
a++ > a++, a:7
end a:11
left right ok
可以看出vc是先对a进行了自增,后比较,而GCC是先比较候自增
这里不仅与求值顺序相关,而且和编译器对指令的优化及执行相关。至于具体的操作流程,有待深入到汇编后的代码里去研究。