|
这个问题和结合性无关而是子表达式的计算顺序的问题。
cout<<a---b<<endl<<a<<b<<endl<<a---b<<endl;
除了cout和endl,一共有a---b,a,b,a---b,四个表达式
其中a---b会被理解成(a--)-b(最长符号原则)
c++没有规定这种情况下子表达式的计算顺序,而由编译器自己决定
在我的MinGW Developer Studio中输出
-1
68
-2
根据结果推算,
在VS2005中是先算后面的a---b,再算前面的a---b,之后a,至于b这里他的顺序无关紧要
在VC6中是先算后面的a---b,再算a,再算前面的a---b
在MinGW中是先算前面的a---b,再算a,再算a---b;
所以会出现上面的结果,对于这种情况最好把他们分开,改成下面的形式,就绝对不会有问题了
cout<<a---b<<endl;
cout<<a<<b<<endl;
cout<<a---b<<endl; |
|