如何在C ++ 17中将“ else-if”与初始化程序一起使用?

时间:2019-08-09 13:05:27

标签: c++ if-statement lambda c++17

cpp参考https://en.cppreference.com/w/cpp/language/if, 看来我不能做到这一点:

if (cond)
{}
else if (init; cond)  // <<--- init not allowed with "else if"
{}

我以一种相当愚蠢的方式绕过它:

if (cond)
{}
else if ([]() -> bool
{
    init;
    if (cond)
    {
        // Do something in the same scope as 'init'
        return true;
    }
    return false;
}())
{}

我在这里是否缺少一些有关如何使用C ++ 17“正确”执行此操作的明显提示?

2 个答案:

答案 0 :(得分:9)

C ++没有“ else if”语句。相反,它是一个单独的else语句,后跟一个单独的if语句。

类似的链子

if (cond1)
{
    ...
}
else if (cond2)
{
    ...
}

等同于

if (cond1)
{
    ...
}
else
{
    if (cond2)
    {
        ...
    }
}

因此应该可以使用else if (init; cond)

答案 1 :(得分:3)

  

不允许使用“ else if”进行初始化

为什么不呢?

以下代码在很大程度上没有用,但是可以与g ++和clang ++完美地编译

int main ()
 {
   if ( bool cond {false} ; cond )
      ;
   else if ( bool cond {true} ; cond )
      ;
 }

正如一些程序员的解释,else if不是单独的C / C ++语句:它是else,后跟另一个语句。因此,以下if不受前面else的限制。