這是三元運算符:(statement)?(if true):(if false)
對不對?在三元運算符中,可以以真值執行兩個操作數嗎?
但爲什麼此代碼無法正常工作?
int a=10, b=20;
(a<b)? a++, b++ : a--, b--;
這是三元運算符:(statement)?(if true):(if false)
對不對?在三元運算符中,可以以真值執行兩個操作數嗎?
但爲什麼此代碼無法正常工作?
int a=10, b=20;
(a<b)? a++, b++ : a--, b--;
逗號運算符比三元運算符的精度要低。由於結腸不能成爲孤兒,因此你可以用第一個逗號而不是第二個逗號。
((a<b)? a++, b++ : a--), b--;
您需要使用圓括號來組合至少第二個逗號表達式,爲了便於閱讀,我會做兩個:
(a<b)? (a++, b++) : (a--, b--);
謝謝。我知道了! – user7394178
條件運算符是因爲編譯器是理解你的代碼C++定義像
conditional-expression:
logical-or-expression
logical-or-expression ? expression : assignment-expression
所以這個表達式語句
(a<b)? a++, b++ : a--, b--;
相當於
((a<b)? a++, b++ : a--), b--;
因爲賦值表達式具有比逗號表達更高的優先級。
你應該寫至少像
(a<b)? a++, b++ : (a--, b--);
或爲了清楚像
(a < b)? (a++, b++) : (a--, b--);
要考慮到有在C條件運算++和C.在條件運營商之間的差C條件運算符被定義爲類似於
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
它意味着用於例子Ë此記錄用C+++
(a < b)? a = b : b = a;
相當於
((a < b)? a = b : b = a);
而在C這個記錄就相當於
((a < b)? a = b : b) = a;
和C編譯器將發出錯誤。
在另一方面,這紀錄C++
((a < b)? a = b : b) = a;
是有效的。:)再次
謝謝。我知道了! – user7394178
運算符優先級...看看它。下次再定義*。 – LogicStuff
[C++中條件運算符中逗號運算符的優先級是什麼?](可能是C++中條件運算符的優先級是什麼?)(http://stackoverflow.com/questions/12136156/whats-the-precedence-of-comma-operator-inside-conditional-operator-in -c) – LogicStuff
像這樣寫一個三元組只會導致混淆,並且寫起來比簡單的'else-if'更可讀或更快,因爲每個結果都有兩個分配。基本上,你需要包括括號,儘管你不應該寫第一個三元組(imo)。 – George