C++, инициализация constexpr полей

105
17 февраля 2022, 12:30

Подскажите, пожалуйста, возможно ли инициализировать constexpr член не в хедере, а в файле реализации?

Например:

// hpp
class Object
{
    public:
    constexpr size_t VALUE;
};
// cpp
constexpr Object::VALUE = 1U;

Если возможно, то как?

Если нет, то почему?

Answer 1

Давайте подумаем. У вас есть файл, отличный от вашего cpp, в котором написано ваше

constexpr Object::VALUE = 1U;

Но вы пытаетесь в нем обратиться к этому члену. Это обращение требует знания значения во время компиляции, но откуда его взять? Если оно в каком-то третьем файле?

Перерывать все файлы проектов? "Где же логика?!" (с) Анекдот

Answer 2

Нестатические поля класса не могут быть объявлены как constexpr. Однако для класса можно делать constexpr конструктор, реализацию которого вынести вне определения класса.

READ ALSO
C++, constexpr и инициализатор синглтона

C++, constexpr и инициализатор синглтона

Рассмотрим следующий код:

71
Связывание таблиц

Связывание таблиц

Есть таблица:

80
Почему странно работает OR? MySql

Почему странно работает OR? MySql

Запрос составлен следующим образом:

132
Log4j2: не пишет логи в файл

Log4j2: не пишет логи в файл

Я подключил Log4j2

105