Перешли на работе на использование компилятора, который поддерживает стандарт C++17.
Автивно начинаем пользоваться различными плюшками из данного стандарта.
Порадовал атрибут [[fallthrough]] для switch case конструкций.
Суть данного атрибут в том, что он указывает, что оператор break был пропущен намеренно в конструкции switch case и что это не является ошибкой программиста.
Дело в том, что конструкция switch case позволяет сквозное выполнение программного кода через все варианты выбора case , если не был добавлен оператор break .
Вот классический вариант применения данной конструкции
- int x = 100;
- bool check_x()
- {
- switch (x)
- {
- case 0:
- return true;
- case 50:
- x = 0:
- break;
- case 100:
- return false;
- default:
- return false;
- }
- }
А вот вариант со сквозным выполнением кода, когда пропущен оператор break.
- int x = 100;
- bool check_x()
- {
- switch (x)
- {
- case 0:
- case 50:
- case 100:
- return true;
- default:
- return false;
- }
- }
В данном случае для всех значений 0, 50, 100 будет выполняться один и тот же код. Но при этом компилятор может выдать предужпредение, а другие программисты, которые могут поддерживать ваш программный код в дальнейшем, могут посчитать это ошибкой.
Чтобы указать, что пропуск оператора break был сделан намерено, был введён атрибут fallthrough ,. И тогда данный программный код будет выглядеть так
- int x = 100;
- bool check_x()
- {
- switch (x)
- {
- case 0:
- [[fallthrough]];
- case 50:
- [[fallthrough]];
- case 100:
- return true;
- default:
- return false;
- }
- }
Также можно информировать компилятор, что оператор default был также пропущен намеренно.
- int x = 100;
- bool check_x()
- {
- switch (x)
- {
- case 0:
- [[fallthrough]];
- case 50:
- [[fallthrough]];
- case 100:
- return true;
- case 105:
- [[fallthrough]];
- }
- return false;
- }
В целом, вещь весьма полезная, которая убирает разночтения и человеческий фактор.