Перешли на работе на использование компилятора, который поддерживает стандарт 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; }
В целом, вещь весьма полезная, которая убирает разночтения и человеческий фактор.