冒号如果声明不同

时间:2015-11-11 11:04:58

标签: c++ syntax expression

这两行陈述有何不同?

a<=20? b=30: c= 30;
(a<=20)?b:c = 30; 

如果我给a = 20的值那么

第一行给出b = 20,c = 0 第二行给出b = 0,c = 0

不是作业问题。

2 个答案:

答案 0 :(得分:1)

根据ternary conditional operator的规则,

a<=20? b=30: c= 30;与:

相同
if (a <= 20) {
    b = 30;
} else {
    c = 30;
}

(a<=20)?b:c = 30;与:

相同
if (a <= 20) {
    b;
} else {
    c = 30; 
}

因此,案例#1和案例#2之间的区别在于条件为b时是否true被设置。

答案 1 :(得分:1)

运营商优先权:
这样:

(a<=20)?b:c = 30;

被解释为:

(a<=20) ? (b) : (c=30) ;
你可能想要

((a<=20)?b:c) = 30;