为什么这在C上不起作用,但在C++上起作用?
(0) ? a = 1 : a = 2;
语言在运算符优先级方面存在差异。
在C++中,三元运算符与赋值运算符具有相同的优先级,注释为
条件运算符中间(
?
和:
之间(的表达式被解析为带括号:忽略其相对于?:
的优先级。
在C中,三元运算符的优先级高于赋值。它对中间的表达也有相同的注释。
这意味着在C中,表达式被解析为括号:
((0) ? (a = 1) : a) = 2;
这是无效的,因为条件表达式不返回L-值。