注册 登录
编程论坛 C++教室

为什么运算符优先级和结合性在这了失效??????

crazy_pro 发布于 2010-09-25 22:45, 618 次点击
#include <iostream.h>

void main()
{
    int x(3),y(4),z;
    z=x>y?++x:++y;
    cout<<x<<","<<y<<","<<z<<endl;//x=3 y=5 z=5
    z=x-y?x+y:x-3?y:x;
    cout<<x<<","<<y<<","<<z<<endl;//x=3 y=5 z=8
}
    结果是:3 5 5
             3 5 8
为什么第二次输出Z的值是8???求教
9 回复
#2
xin3109232010-09-26 15:55
:  优先级比=  ?的优先级高。
#3
crazy_pro2010-09-27 13:22
回复 2楼 xin310923
那为什么结果Z的值是8而不是3???????????
#4
minghan03132010-09-27 14:52


条件操作符的优先级相当低.当我们要在一个更大的表达式中嵌入条件表达式时,通常必须用圆括号把表达式括起来...........如果不严格使用圆括号将条件操作符括起来,将会得到意外的结果
因为不确定你问题的所在  所以翻了翻书  上面是从C++primer第四版 165页摘的一段话   

z=x-y?x+y:x-3?y:x;

因为优先级低,可不可以上面的表达式按颜色看成一个大的条件操作运算 ?x=3 y=5 z=5

先判断红色的 x-y  x-y不等于0  所以z=x+y=8  x-3?y:x根本就没有执行   

不知道自己说的正确与否  全为一家之见  如果说错了请不要见怪  我也是初学者
#5
xin3109232010-09-27 15:09
回复 4楼 minghan0313
反正就是优先级的问题   自己回去看书吧
#6
xin3109232010-09-27 15:10
lz也要回去多看几遍c++
#7
crazy_pro2010-09-27 23:10
回复 4楼 minghan0313
他的结合性是由右向左的啊  是不是应该先算后面的啊!然后再算前面的表到式的值啊???如果按你说的
就没有问题啊,但是如果按我说的Z的值就是3啊!条件运算符的 结合性是由右向左的啊! 谢谢4楼的回复!
#8
crazy_pro2010-09-27 23:10
回复 5楼 xin310923
谢谢
#9
minghan03132010-09-28 08:59
以下是引用crazy_pro在2010-9-27 23:10:24的发言:

他的结合性是由右向左的啊  是不是应该先算后面的啊!然后再算前面的表到式的值啊???如果按你说的
就没有问题啊,但是如果按我说的Z的值就是3啊!条件运算符的 结合性是由右向左的啊! 谢谢4楼的回复!
我也问了问其他同学   有人的确给出了结合性是从右向左计算的   不过就这个表达式来说   x-3?y:x这个表达式的值对整个表达式时没有影响的 因为在x-3?y:x里没有改变x和y的值 先计算x-3?y:x 也不会影响到前面xyz的值   如果变成x-3?++y:++x; 那么结果的值就该考虑了     
#10
vfdff2010-09-29 00:08
多加点括号吧
1