运算符的优先级问题
注意:
tax_rate = income>40000 && residency<5 ? 3.5 : 2.0;
这里尽管赋值运算符=比三目运算符优先级要高,但是因为其从右向左的结合性,因此要先计算三目运算符再对tax_rate进行赋值
【例】一个经典的错误
while(c=getc(in) != EOF) ...
这段代码本意是从文件中读取一个字符,然后赋值给c,再与EOF(-1)进行比较。
但是,这里由于赋值运算符=比关系运算符!=优先级低,因此会先计算getc(in)!=EOF,返回结果为1。再将值赋给c,这样c会一直为1
改进方式:
while((c = getc(in)) != EOF)...