在做一个工程,遇到奇怪的bug,问题类似如下
int a=1,b=2,c=3,d;
d=a*b + c ? 1: 0;
问d结果是多少?
设计时,我想结果应该为3 (1*2+1)
实际d结果为1
因为问号冒号表达式的优先级比较低(三元运算符优先级小于二元运算符,比如加号+)
所以实际运行时d和以下表达式等价:
d= (a*b + c) ? 1: 0;
而不是我们预想中的a*b + (c ? 1 : 0)
在做一个工程,遇到奇怪的bug,问题类似如下
int a=1,b=2,c=3,d;
d=a*b + c ? 1: 0;
问d结果是多少?
设计时,我想结果应该为3 (1*2+1)
实际d结果为1
因为问号冒号表达式的优先级比较低(三元运算符优先级小于二元运算符,比如加号+)
所以实际运行时d和以下表达式等价:
d= (a*b + c) ? 1: 0;
而不是我们预想中的a*b + (c ? 1 : 0)
原文地址:http://blog.csdn.net/myjisgreat/article/details/46487099