C++ 属性: fallthrough (自 C++17 起)
来自 cppreference.com
指示从上一个 case 标签处发生的穿透是故意的,并且编译器不应对此发出关于穿透的警告。
内容 |
[编辑] 语法
[[fallthrough]]
|
|||||||||
[编辑] 解释
只能应用于 空语句 以创建穿透语句 ([[fallthrough]];).
穿透语句只能在 switch 语句中使用,其中要执行的下一个语句是具有该 switch 语句的 case 或 default 标签的语句。如果穿透语句位于循环内,则下一个(带标签的)语句必须是该循环的相同迭代的一部分。
[编辑] 示例
运行此代码
void f(int n) { void g(), h(), i(); switch (n) { case 1: case 2: g(); [[fallthrough]]; case 3: // no warning on fallthrough h(); case 4: // compiler may warn on fallthrough if (n < 3) { i(); [[fallthrough]]; // OK } else { return; } case 5: while (false) { [[fallthrough]]; // ill-formed: next statement is not // part of the same iteration } case 6: [[fallthrough]]; // ill-formed, no subsequent case or default label } }
[编辑] 缺陷报告
以下行为更改缺陷报告被追溯应用于先前发布的 C++ 标准。
DR | 应用于 | 发布的行为 | 正确的行为 |
---|---|---|---|
CWG 2406 | C++17 | [[fallthrough]] 可能会出现在循环中 嵌套在目标 switch 语句中 |
禁止 |
[编辑] 参考资料
- C++23 标准 (ISO/IEC 14882:2024)
- 9.12.6 穿透属性 [dcl.attr.fallthrough]
- C++20 标准 (ISO/IEC 14882:2020)
- 9.12.5 穿透属性 [dcl.attr.fallthrough]
- C++17 标准 (ISO/IEC 14882:2017)
- 10.6.5 穿透属性 [dcl.attr.fallthrough]
[编辑] 另请参见
C 文档 for fallthrough
|