我想知道这个 if 语句的等价物是什么:
if (condition) {
// do something
}else{
// do nothing
}
使用条件运算符:
(condition) ? // [do nothing] : {do nothing} "
我想知道这个 if 语句的等价物是什么:
if (condition) {
// do something
}else{
// do nothing
}
使用条件运算符:
(condition) ? // [do nothing] : {do nothing} "
使用条件运算符不可能“什么都不做”。尽管两个表达式都可以转换为void
.
这是三元运算符( ?: )的缺点之一。
它需要在所有三个地方都有表达。你不能跳过任何一个。
您可以对其进行一些调整,但是可以将其 True-part 和/或 False-part 分配给相同的:
int big=100;
big= (10 > 100) ? 0 : big;
if (!condition) {
// do something
}else{
// do nothing
}
现在看看 !before contition :-)
这 !在条件只是将“如果”切换为“如果不是”之前......
那是你一直在寻找的吗?
在普通代码中,答案是没有等价的——表达式的所有子表达式都必须有一个值,但是......
以下不是建议
在一般情况下,以下内容应该可以工作:
condition ? ( (^{ do something })(), 0 ) : 0;
这是针对一般情况的。如果做某事是一个单一的、非复合的陈述;比如方法调用;然后可以删除该块以给出:
condition ? (do something, 0) : 0;
同样不建议在实际代码中这样做!
你可以做这样的事情
someBool ? [self someFunction] : (^{})(); //empty block
originalValue = (condition) ? newValue : originalValue
然后编译器应该删除不必要的originalValue分配给它自己。
GCC 有一个扩展可以为您提供更多您正在寻找的东西,例如
originalValue = condition ?: newValue;
所以它也可能在 clang 中可用。你将不得不!条件虽然。