2

我想知道这个 if 语句的等价物是什么:

if (condition) {
        // do something
    }else{
        // do nothing

    }

使用条件运算符:

(condition) ? // [do nothing] : {do nothing} "
4

6 回答 6

2

使用条件运算符不可能“什么都不做”。尽管两个表达式都可以转换为void.

于 2013-03-15T10:31:52.090 回答
2

这是三元运算符( ?: )的缺点之一。

它需要在所有三个地方都有表达。你不能跳过任何一个。

您可以对其进行一些调整,但是可以将其 True-part 和/或 False-part 分配给相同的:

int big=100;
big= (10 > 100) ? 0 : big;
于 2013-03-15T10:45:13.547 回答
0
if (!condition) {
        // do something
    }else{
        // do nothing

    }

现在看看 !before contition :-)

这 !在条件只是将“如果”切换为“如果不是”之前......

那是你一直在寻找的吗?

于 2013-03-15T10:31:23.680 回答
0

在普通代码中,答案是没有等价的——表达式的所有子表达式都必须有一个值,但是......

以下不是建议

在一般情况下,以下内容应该可以工作:

condition ? ( (^{ do something })(), 0 ) : 0;

这是针对一般情况的。如果做某事是一个单一的、非复合的陈述;比如方法调用;然后可以删除该块以给出:

condition ? (do something, 0) : 0;

同样不建议在实际代码中这样做!

于 2013-03-15T11:00:07.717 回答
0

你可以做这样的事情

someBool ? [self someFunction] : (^{})(); //empty block
于 2013-03-15T11:00:52.917 回答
0
originalValue = (condition) ? newValue : originalValue

然后编译器应该删除不必要的originalValue分配给它自己。

GCC 有一个扩展可以为您提供更多您正在寻找的东西,例如

originalValue = condition ?: newValue;

所以它也可能在 clang 中可用。你将不得不!条件虽然。

于 2013-03-15T10:49:37.870 回答