条件运算符(?:)的问题
for37 2007-03-05 11:50:23 根据c++语法,条件运算符(?:)的优先级高于赋值运算符(=)
对于以下表达式:
1) x=y>z?y:z
2) y>z?y:z=x
如果用括号体现其运算顺序,括号应放在哪呢?
第一个是没有争议的:x=(y>z?y:z)
那第二个呢?
按我的理解,应是:(y>z?y:z)=x
很多人可能认为表达式(y>z?y:z)=x有语法错误,我要说明两点:
第一:该表达式没有语法错误(你可以尝试编译)
第二:即使有语法错误,编译器也不会改变词法分析以避免之
所以这里只讨论执行顺序,而不管是否有语法错误
但非常遗憾,编译器认为是:y>z?y:(z=x)
我非常不解,如果是:y>z?y:z+x,那么应该是:y>z?y:(z+x),因为加号(+)优先级高于条件运算符,但赋值运算符是低于条件运算符的啊!
请个各位指点