這個輸出5
,這是正確的。意外的三元賦值
int var = 100 + (1 == 1) ? (5) : (10);
這又輸出5
。爲什麼?
我知道我可以圍繞整個三元聲明添加括號解決這個問題,但這並不能說明與另外發生了什麼,以及爲什麼它的行爲就像一個在第一的位置。
這個輸出5
,這是正確的。意外的三元賦值
int var = 100 + (1 == 1) ? (5) : (10);
這又輸出5
。爲什麼?
我知道我可以圍繞整個三元聲明添加括號解決這個問題,但這並不能說明與另外發生了什麼,以及爲什麼它的行爲就像一個在第一的位置。
原因是運算符優先級的規則,並且任何非零值測試都爲真。
100 + (1 == 1) ? (5) : (10)
相當於(100 + (1 == 1)) ? (5) : (10)
即(101 != 0) ? (5) : (10)
。
運算符?:
的優先級低於加法運算的優先級。
在C中,每個非零值爲「true」,這裏100 + (1 == 1)
的值爲101
,這也是「true」,因此選擇了(5)
。由於?:
的優先級非常低,因此應該使用括號((1==1) ? 5 : 10)
來達到所需的效果。
[運算符優先級表]的可能的重複(http://stackoverflow.com/questions/17369090/operator-precedence-table) –
這裏有點複雜。如果不涉及條件,情況就不一樣了。編輯:什麼。 – Malina