Как стать автором
Обновить

Комментарии 6

Один из способов избежать этих проблем — обеспечить этим константами внешнее связывание, тогда мы сможем иметь единственную переменную (инициализированную один раз), которая является общей для всех единиц трансляции.

или


Мы можем включать constants.h в любое количество cpp-файлов, но эти переменные будут созданы только один раз и совместно использоваться во всех файлах с кодом.

Настораживает, использование слова "переменная", когда речь идет о константах или о константных выражениях.

Изменение одной константы потребует перекомпиляции каждого файла, используеющего константы, что делает компиляцию долгой для крупных проектов.

А с inline разве не потребует? Заголовочный файл ведь по-прежнему нужно инклудить везде, а определения в нем.

Походу, это попытка посмотреть в будущее. Типа, компилятор разделяет такой файл на два виартуальных: собственно заголовочник и сгенерированную единицу трансляции, куда сами значения записываются. Изменяя значение, по сути меняется содержимое "виртуального" объектника и нужно пересобрать только его, а дальше перелинковаться. Но мне кажется, что условиях поголовного использования CPP это реализуемо только через костыли и более-менее прямо, только с модулями. Собственно, поэтому и предположение о взгляде на перспективу.

Вы правы, с inline тоже потребует

Функция, определенная полностью внутри определения класса/структуры/объединения, неявно является встроенной функцией

В модулях C++20 все функции полностью определены вунтри классов и inline в модулях нужно писать явно

Использовать фигурные скобки для инициализации скаляров некрасиво.
Старый добрый знак равенства лучше.
А в остальном всё правильно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий