c/c++语言开发共享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); } 

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

    需要了解更多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

      (0)
      上一篇 2021年12月12日
      下一篇 2021年12月12日

      精彩推荐