c/c++语言开发共享C中没有其他三元运算符

我想在C中没有使用三元运算符。我该怎么做。

(a)? b: nothing; 

这样的事情。 我什么都不用?

    如果您使用的是这样的三元运算符,可能会被替换为:

     if (a) { b; } 

    哪个更好,更好。 (意图更清晰,因此代码更容易阅读,并且不会有性能损失。)

    但是,如果您使用三元运算符作为表达式,即

     printf("%d cat%s", number_of_cats, number_of_cats != 1 ? "s" : ); a = b*c + (d == 0 ? 1 : ); 

    那么值取决于它所使用的上下文。在我的第一个例子中, 应该是"" ,而在第二个例子中它应该是0

    省略的false表达式无效。 请尝试反转条件。

     (!a) ?: b; 

    if-else是一个控制流构造wheras?:是一个运算符, x ? y : z x ? y : z是一个表达式 – 表达式不能具有“无值”,而控制流可以具有“不执行任何路径”。 if-else和?之间没有真正的等价: – 它们在所有情况下都不可互换。

    某些情况下,你可以达到你想要的效果,但是if没有else情况,使用if可能效率较低。 例如:效果:

     if( x ) { y = z ; } 

    可通过以下方式实现:

     y = x ? z : y ; 

    但是当x为false时,有一个有效但多余的else y = y赋值,你的编译器可能会或可能不会优化。 因此,只有当您知道要返回的“当前值”作为?:表达式结果时,才能实现该效果。

    你不能省略else部分。 只需使用无表达式。

    但是,在这种情况下,通常最好使用if

    似乎这个问题已经存在了一段时间,但FWIW是一个用GCC 4.6.3编译的简短C程序,揭示了以下内容:

    也许有人可以添加更多的编译器端细节,但对我来说,省略true执行路径似乎只是花哨。

    我尝试将任何整数放在那里,效果很好。 例如,如果您想要返回“a”,如果它被评估为true,那么您可以将其写为:

     true ? a : 1; 

    我这样做了

    isLeapYear(i) ? cout<< i<

    但不确定,如果有任何性能损失。

    试试这个

    需要了解更多c/c++开发分享C中没有其他三元运算符,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

     BOOL bIsOK = (a == 5)?TRUE:FALSE; 

      以上就是c/c++开发分享C中没有其他三元运算符相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/979119.html

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

      精彩推荐