我想在C中没有使用三元运算符。我该怎么做。
(a)? b: nothing;
像这样的事情。我什么都不用?
答案 0 :(得分:40)
如果您使用的是这样的三元运算符,可能会被替换为:
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
}。
答案 1 :(得分:15)
省略的虚假表达无效。请尝试改变条件。
(!a) ?: b;
答案 2 :(得分:10)
if-else
是一个控制流构造,其中?:
是一个运算符,x ? y : z
是一个表达式 - 一个表达式不能有“无值”,而控制流可以有一个“做”没有路径“。 if-else和?之间没有真正的等价: - 它们在所有情况下都不可互换。
您可以在某些环境中实现所需的效果,但使用if
而不使用else
可能效率较低。例如:
if( x )
{
y = z ;
}
可以通过以下方式实现:
y = x ? z : y ;
但是当x为false时,有一个有效但冗余的else y = y
赋值,您的编译器可能会或可能不会优化。因此,只有当您知道要返回?:
表达式结果的“当前值”时,才能达到效果。
答案 3 :(得分:3)
您不能省略else
部分。只需使用无表达式。
但是,在这种情况下,通常最好使用if
...
答案 4 :(得分:2)
似乎这个问题已经存在了一段时间,但FWIW是一个用GCC 4.6.3编译的简短C程序,揭示了以下内容:
a = a ? b:;
和a = a ?: b;
也许有人可以添加更多的编译器端细节,但对我来说,省略a = a ? a : b;
执行路径似乎只是花哨。
答案 5 :(得分:0)
我做了这个
isLeapYear(i) ? cout<< i<<endl: cout<<"" ;
不确定,如果有任何表现受到影响。
答案 6 :(得分:0)
我尝试将任何整数放在那里,效果很好。例如,如果您想要返回&#34; a&#34;如果它被评估为真,那么你可以这样写:
true ? a : 1;
答案 7 :(得分:0)
三元表达式基于从布尔条件导出语句。如果一条语句被标记为 void()
,那么正如您所料,什么都不会发生。
C++ 代码:
condition ? add(value) : void();
C 代码:
condition ? add(value) : 0;
答案 8 :(得分:-7)
试试这个
BOOL bIsOK = (a == 5)?TRUE:FALSE;