是的,如果三元運算符的兩個選項都是相同類型的左值,則是有效的。
N3242 5.16/4:如果所述第二和第三操作數是相同值類別的glvalues並且具有相同的類型,則結果是 類型和值類別
三元的運算符稱爲條件運算符。
Gramar方面:
以下gramar生產:
conditional-expression:
logical-or-expression
logical-or-expression ? expression : assignment-expression
允許語句等:
true ? b : a = 20; // yields b. if condition would be false, would yield a =20
true ? b = 11 : a = 21; // yields b=11
作爲gramar示出井的assignement將被限制於所述一個分支
然而,如果我們考慮gramar生產的全鏈條:
assignment-expression:
logical-or-expression assignment-operator initializer-clause
...
logical-or-expression:
logical-and-expression
logical-or-expression || logical-and-expression
logical-and-expression:
inclusive-or-expression
logical-and-expression && inclusive-or-expression
...
primary-expression:
(expression)
...
所以你可以再寫入類似的表達式:
(true ? a : b) = 10; // a and b are lvalues, a or be are set to 10 depending on the condition
左值?你的意思是我不能'int i = f? 3:4',因爲整數文字是prvalues? – legends2k 2014-12-07 01:58:47
@ legends2k「如果」,而不是「僅當」。三元運算符取第二個和第三個表達式的所有值類別。 – aschepler 2014-12-07 02:00:23
@ legends2k我引用的問題是:'(bool_b?int_i1:int_i2)= int_i3;'如果'int_i1'和'int_i2'都是左值,則'有效。如果與文字混合,這是無效的:'(bool_b?int_i1:10)= int_i3;'是無效的,因爲條件不能確保爲分配返回一個左值。 – Christophe 2014-12-07 02:48:17