Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在if-else链的末尾,有没有简单的方法来做与else相反的事情?_C++ - Fatal编程技术网

C++ 在if-else链的末尾,有没有简单的方法来做与else相反的事情?

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

是否有一种更简单的通用方法来运行一组使用if-else链中设置的值的代码,前提是其中一个if-else条件为true?我有点想用一句话来结束这个链条,这句话的意思是与其他事物相反的。。。比如“如果”,“否则”,“好的,其中一个是真的,现在就这样做。”

一般来说,一个明显的实现是:

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)