我想在C中使用三元运算符而不使用else。我该怎么做。
(a)? b: nothing;
类似这样的事情。我在什么都没有的部分用什么?
如果您使用这样的三元运算符,大概可以将其替换为:
if (a) { b; }
这好多了,好多了。 (意图更清晰,所以代码更容易阅读,并且不会有性能损失。)
但是,如果您使用三元运算符作为表达式,即
printf("%d cat%s", number_of_cats, number_of_cats != 1 ? "s" : <nothing>);
a = b*c + (d == 0 ? 1 : <nothing>);
然后
<nothing>
值取决于它所使用的上下文。在我的第一个示例中,
<nothing>
应该是
""
,在第二个示例中它应该是
0
。
(!a) ?: b;
if-else
是控制流构造,而
?:
是运算符,
x ? y : z
是表达式 - 表达式不能具有“无值”,而控制流可以具有“不执行任何操作的路径”。 if-else 和 ?: 之间没有真正的等价物 - 它们在所有情况下都不能互换。在某些
情况下你可以达到你想要的效果,但可能比不使用if
而使用
else
效率低。例如效果:if( x )
{
y = z ;
}
可以通过以下方式实现:
y = x ? z : y ;
但是当 x 为 false 时,有一个有效但冗余的
else y = y
赋值,您的编译器可能会也可能不会优化它。因此,您可以实现效果,但前提是您知道要作为
?:
表达式结果返回的“当前值”。else
部分。只需使用 none 表达式即可。
但是,在这种情况下,通常最好使用
if
...
以下内容无法编译:
a = a ? b:;
a = a ?: b;
a = a ? a : b;
true
执行路径只是一种幻想。
true ? a : 1;
isLeapYear(i) ? cout<< i<<endl: cout<<"" ;
但不确定这是否会对性能造成影响。
void()
那么正如你所期望的,什么也不会发生。
C++代码:condition ? add(value) : void();
C代码:
condition ? add(value) : 0;
if()
语句更适合,我曾经这样做过
condition ? value : throw;
并保留上面的内容或添加特定的例外情况。
a ? b : nothing;
可以采取。
短路评估,其中b
仅当
a
为 true 时才会评估:a && b;
三元,其中
nothing
表达式为
(void)0
:a ? b : (void)0;
具有空白中间的反向三元条件(可能不可移植):
!a ? : b;
一个简单的
if
声明:
if (a) {
b;
}
BOOL bIsOK = (a == 5)?TRUE:FALSE;