下通

Version >= C++ 17

每当 caseswitch 中结束时,下一个案例的代码将被执行。使用’break`语句可以防止最后一个。由于这种所谓的突破行为可能会在没有预期的情况下引入错误,因此多个编译器和静态分析器会对此发出警告。

从 C++ 17 开始,引入了一个标准属性,表示当代码要通过时不需要警告。当案件结束时没有 break[[fallthrough]] 并且至少有一个声明,编译器可以安全地发出警告。

switch(input) {
    case 2011:
    case 2014:
    case 2017:
        std::cout << "Using modern C++" << std::endl;
        [[fallthrough]]; // > No warning
    case 1998:
    case 2003:
        standard = input;
}

有关如何使用 [[fallthrough]] 的更详细示例,请参阅提案