从 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“正确”执行此操作的明显提示?
答案 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
的限制。