Атрибут C++: fallthrough (с C++17)
Указывает, что переход от предыдущей метки case является преднамеренным и не должен вызывать предупреждение компилятора о переходе.
Синтаксис
[[fallthrough]] |
Объяснение
Может быть применён только к пустому оператору, чтобы создать оператор перехода ([[fallthrough]];).
Оператор перехода может быть использован только в операторе switch, где следующее выполняемое утверждение является утверждением с меткой case или default для этого оператора switch. Если оператор перехода находится внутри цикла, следующее (именованное) утверждение должно быть частью той же итерации этого цикла.
Пример
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 документация для fallthrough |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/language/attributes/fallthrough