C与C ++中的三元运算符

C和C ++之间存在很多差异并且卡在其中一个上相同的代码在C中产生错误而在C ++中执行正常请解释原因

int main(void) { int a=10,b; a>=5?b=100:b=200; } 

上面的代码在C中给出了一个错误,说明了所需的左值 ,而相同的代码在C ++中编译得很好

看一下运算符的优先级。

没有explicit ()你的代码就像

 ( a >= 5 ? b = 100 : b ) = 200; 

?:表达式的结果不是可修改的左值 [#] ,因此我们无法为其赋值

另外,值得一提的是,根据c语法规则,

永远不允许赋值出现在条件运算符的右侧

Relared Reference: C优先级表 。

OTOH,在c++情况下,好吧,

条件运算符与赋值具有相同的优先级。

从右到左分组,基本上使你的代码表现得像

  a >= 5 ? (b = 100) : ( b = 200 ); 

因此,在c++情况下,您的代码可以正常工作


[#] – 根据第6.5.15章,脚注(12), C99标准,

条件表达式不会产生左值。

因为C和C ++不是同一种语言,而你忽略了三元所暗示的赋值。 我想你想要的

 b = a>=5?100:200; 

它应该适用于C和C ++。

在C中,您可以通过将表达式放在括号内来修复它,以便在评估赋值时变为有效。

 int main(void) { int a=10,b; a>=5?(b=100):(b=200); } 

该错误是因为您不关心运算符优先级和评估顺序。