use*_*777 29 c if-statement ternary operator-keyword
我想在C中没有使用三元运算符.我该怎么做.
(a)? b: nothing;
Run Code Online (Sandbox Code Playgroud)
这样的事情.我什么都没用?
huo*_*uon 41
如果您使用这样的三元运算符,可能会被以下内容替换:
if (a) { b; }
Run Code Online (Sandbox Code Playgroud)
这是多,多好.(意图更清晰,因此代码更容易阅读,并且不会有性能损失.)
但是,如果您使用三元运算符作为表达式,即
printf("%d cat%s", number_of_cats, number_of_cats != 1 ? "s" : <nothing>);
a = b*c + (d == 0 ? 1 : <nothing>);
Run Code Online (Sandbox Code Playgroud)
那么这个<nothing>值取决于它所使用的上下文.在我的第一个例子中,<nothing>应该是"",而在第二个例子中它应该是0.
小智 16
省略的false表达式无效.请尝试反转条件.
(!a) ?: b;
Run Code Online (Sandbox Code Playgroud)
Cli*_*ord 10
if-else是一个控制流构造wheras ?:是一个运算符,并且x ? y : z是一个表达式 - 一个表达式不能具有"无值",而控制流可以具有"不做任何路径".if-else和?之间没有真正的等价: - 它们在所有情况下都不可互换.
在某些情况下,您可以达到所需的效果,但使用if不使用效果可能效率较低else.例如:效果:
if( x )
{
y = z ;
}
Run Code Online (Sandbox Code Playgroud)
可通过以下方式实现:
y = x ? z : y ;
Run Code Online (Sandbox Code Playgroud)
但是else y = y当x为false时,有一个有效但冗余的赋值,你的编译器可能会或可能不会优化.因此,只有当您知道要返回的"当前值"作为?:表达式结果时,才能实现此效果.
您不能省略该else部分。只需使用 none 表达式即可。
但是,在这种情况下,通常最好使用if...
| 归档时间: |
|
| 查看次数: |
36400 次 |
| 最近记录: |