C++ 中的 switch 语句

switch statements in C++

下面两个switch语句的代码片段有什么区别?

哪个更好?我什么时候可以同时使用它们?

案例 1:

int i = 10;
switch(i)
{
//case
}

案例 2:

switch(int i = 10, i)
{
//case
}

在第二种情况下,C++17 允许在 switch 语句中初始化变量。

在第一个版本中,i 存在于 switch 的作用域结束之后。如果以后需要 i,您可以使用它。如果你的编译器知道 C++17,你可以使用第二个版本。

switch (int i = 42; i) 是 C++17 并且会将 i 的范围限制为开关,它主要等同于:

// Code before switch
{ // Additional scope
    int i = 42;
    switch (i) {
    // case...
    }
}
// Code after switch

它也适用于 if

if (int i = 42; i == foo()) {
    // Can use i
} else {
    // Can use i
}