Ваш переход к глобальным константам в C ++ 17 должен быть следующим:
inline constexpr int CONSTANT = 42;
Это дает вам хорошую первоклассную переменную, которую вы можете использовать в константных выражениях, и которая не будетесть ODR-проблемы.Вы можете взять ссылки на него.
Макросы вызывают проблему ... быть макросами.Перечисления ограничены целочисленными типами.С constexpr
переменными вы можете иметь их любого литерального типа.В C ++ 20 вы, скорее всего, сможете просто сойти с ума и написать:
inline constexpr std::vector<int> small_primes = {2, 3, 5, 7, 11};
inline constexpr std::string cool_name = "Barry";
Это единственный вариант, который позволяет это.