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); }
该错误是因为您不关心运算符优先级和评估顺序。
需要了解更多c/c++开发分享C与C ++中的三元运算符,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!
以上就是c/c++开发分享C与C ++中的三元运算符相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/979302.html