三元运算符内的赋值在 c 中不起作用



为什么这在C上不起作用,但在C++上起作用?

(0) ? a = 1 : a = 2;

语言在运算符优先级方面存在差异。

在C++中,三元运算符与赋值运算符具有相同的优先级,注释为

条件运算符中间(?:之间(的表达式被解析为带括号:忽略其相对于?:的优先级。

在C中,三元运算符的优先级高于赋值。它对中间的表达也有相同的注释。

这意味着在C中,表达式被解析为括号:

((0) ? (a = 1) : a) = 2;

这是无效的,因为条件表达式不返回L-值。

最新更新