C++ 属性: fallthrough (C++17 起)
来自cppreference.com
指示从前一标号直落是有意的,而在发生直落时给出警告的编译器不应诊断它。
语法
|
|||||||||
解释
只能应用到空语句以创建直落语句(fallthrough statement):[[fallthrough]];。
直落语句只能用在 switch 语句中,其中待执行的下个语句是该 switch 语句的带 case 或 default 标号的语句。如果直落语句在循环中,那么下个(带标号)语句必须是该循环的同一迭代的一部分。
示例
运行此代码
void f(int n)
{
void g(), h(), i();
switch (n)
{
case 1:
case 2:
g();
[[fallthrough]];
case 3: // 直落时不警告
h();
case 4: // 编译器可在发生直落时警告
if (n < 3)
{
i();
[[fallthrough]]; // OK
}
else
{
return;
}
case 5:
while (false)
{
[[fallthrough]]; // 非良构:下一语句不是同一迭代的一部分
}
case 6:
[[fallthrough]]; // 非良构:没有后继的 case 或 default 标号
}
}
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| CWG 2406 | C++17 | [[fallthrough]] 可以在对应的 switch 语句中嵌套的循环中出现
|
已禁止 |
引用
- C++23 标准(ISO/IEC 14882:2024):
- 9.12.6 Fallthrough attribute [dcl.attr.fallthrough]
- C++20 标准(ISO/IEC 14882:2020):
- 9.12.5 Fallthrough attribute [dcl.attr.fallthrough]
- C++17 标准(ISO/IEC 14882:2017):
- 10.6.5 Fallthrough attribute [dcl.attr.fallthrough]
参阅
fallthrough 的 C 文档
|