I want to use ternary operator without else in C. How do I do it.
(a)? b: nothing;
something like this. What do I use in nothing part?
I want to use ternary operator without else in C. How do I do it.
(a)? b: nothing;
something like this. What do I use in nothing part?
如果您正在使用这样的三元运算符,大概可以将其替换为:
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 ;
但是else y = y
当 x 为 false 时,有一个有效但冗余的分配,您的编译器可能会或可能不会优化。所以你可以达到效果,但前提是你知道“当前值”作为?:
表达式结果返回。
You can't omit the else
part. Just use a none expression.
But, in that case, it is often better to use an if
...
我尝试将任何整数放在那里,效果很好。例如,如果你想返回“a”,如果它被评估为真,那么你可以这样写:
true ? a : 1;
似乎这个问题已经存在了一段时间,但 FWIW 一个用 GCC 4.6.3 编译的简短 C 程序揭示了以下内容:
a = a ? b:;
. “错误:';'之前的预期表达式 令牌”。a = a ?: b;
和a = a ? a : b;
也许有人可以添加更多编译器方面的细节,但对我来说,省略执行路径似乎true
只是很花哨。
三元表达式基于从布尔条件派生的语句。如果按照您的预期标记了一个语句,void()
那么什么也不会发生。
C++ 代码:
condition ? add(value) : void();
C代码:
condition ? add(value) : 0;
我做了这个
isLeapYear(i) ? cout<< i<<endl: cout<<"" ;
但不确定,如果这对性能有任何影响。
尝试这个
BOOL bIsOK = (a == 5)?TRUE:FALSE;