C++ 在if-else链的末尾,有没有简单的方法来做与else相反的事情?
是否有一种更简单的通用方法来运行一组使用if-else链中设置的值的代码,前提是其中一个if-else条件为true?我有点想用一句话来结束这个链条,这句话的意思是与其他事物相反的。。。比如“如果”,“否则”,“好的,其中一个是真的,现在就这样做。” 一般来说,一个明显的实现是:C++ 在if-else链的末尾,有没有简单的方法来做与else相反的事情?,c++,C++,是否有一种更简单的通用方法来运行一组使用if-else链中设置的值的代码,前提是其中一个if-else条件为true?我有点想用一句话来结束这个链条,这句话的意思是与其他事物相反的。。。比如“如果”,“否则”,“好的,其中一个是真的,现在就这样做。” 一般来说,一个明显的实现是: bool somethingWasTrue = true; if( x ) z = 0; else if( y ) z = ResultOfSomething(); else something
bool somethingWasTrue = true;
if( x )
z = 0;
else if( y )
z = ResultOfSomething();
else
somethingWasTrue = false;
if( somethingWasTrue )
{
// code that uses z
}
我能想到的最好的潜在解决方案是使用可选的z,然后用if(z)代替if(somethingwasttrue),您可以尝试以下方法:
bool somethingWasTrue = true;
if( x )
z = 0;
else if( y )
z = ResultOfSomething();
else
// code that uses z
由于您希望在前两个“如果”为false时触发“默认”选择,因此只需在末尾添加一个“else”。您可以
中断
循环,提前终止else
,否则继续处理
do {
if( x )
z = 0;
else if( y )
z = ResultOfSomething();
else
break;
// code that uses z
} while( 0 );
你根本不需要这个变量。使用易碎块:
do {
if( x )
z = 0;
else if( y )
z = ResultOfSomething();
else
break;
// code that uses z
} while(false);
我同意你的“明显的实施”。我认为这是最清晰的
而且这并不是真正的浪费。g++和clang++甚至在-O1优化级别上都消除了
bool:。创建子函数如何:
void foo(int z)
{
// code that uses z
}
然后
if (x)
foo(0);
else if( y )
foo(ResultOfSomething());
不完全是这样,OP想要将somethingwasttrue
设置为false,如果他们到达最后一个else
(也就是说,如果最后一个else被命中,他们不想运行“使用z的代码”)。对于这个有限的示例,只需将return
放在else
之后。如果你的意图是转到,那么你为什么不使用它呢?为什么这do/break/while(false)
?