Как объявить константу в С++?

RU / День 2 / 12:30 / Зал 1

С++ прекрасен тем, что простейшие вещи в нём могут быть чрезвычайно запутанны и сложны. Казалось бы, что может быть проще, чем объявить константу?

Достаточно лишь выбрать подходящий нам linkage и storage duration, определиться с видимостью константы и тем, в каких единицах трансляции она будет представлена. Затем, исходя из этого, выбрать соответствующий способ определения: макрос (шутка), член enum, глобальная переменная, локальная переменная, статическое поле класса. В случае переменной указать подходящий спецификатор (или их комбинацию): static, extern, inline, constexpr. Ещё может быть стоит сделать переменную шаблоном или ссылкой. А если речь идёт о строке, надо бы ещё не прогадать с типом: const char*, char[], std::string, std::string_view.

Если для вас все эти шаги очевидны — поздравляем! Это впечатляет. Если же вам, как и Михаилу, этот зоопарк немного взрывает мозг, то давайте вместе в этом разберёмся.

В докладе мы вспомним всю релевантную теорию: linkage и storage duration, объявление и определение, спецификаторы static, inline, extern и constexpr и их комбинации. Увидим, какие последствия имеет тот или иной способ объявления константы. В итоге мы сформулируем универсальные рекомендации на все случаи жизни.