我想在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