Комментарии 6
Один из способов избежать этих проблем — обеспечить этим константами внешнее связывание, тогда мы сможем иметь единственную переменную (инициализированную один раз), которая является общей для всех единиц трансляции.
или
Мы можем включать constants.h в любое количество cpp-файлов, но эти переменные будут созданы только один раз и совместно использоваться во всех файлах с кодом.
Настораживает, использование слова "переменная", когда речь идет о константах или о константных выражениях.
Изменение одной константы потребует перекомпиляции каждого файла, используеющего константы, что делает компиляцию долгой для крупных проектов.
А с inline разве не потребует? Заголовочный файл ведь по-прежнему нужно инклудить везде, а определения в нем.
Походу, это попытка посмотреть в будущее. Типа, компилятор разделяет такой файл на два виартуальных: собственно заголовочник и сгенерированную единицу трансляции, куда сами значения записываются. Изменяя значение, по сути меняется содержимое "виртуального" объектника и нужно пересобрать только его, а дальше перелинковаться. Но мне кажется, что условиях поголовного использования CPP это реализуемо только через костыли и более-менее прямо, только с модулями. Собственно, поэтому и предположение о взгляде на перспективу.
Функция, определенная полностью внутри определения класса/структуры/объединения, неявно является встроенной функцией
В модулях C++20 все функции полностью определены вунтри классов и inline в модулях нужно писать явно
Старый добрый знак равенства лучше.
А в остальном всё правильно.
Inline variables