Чем отличается constexpr от const constinit?

Чем отличаются объявления в глобальном пространстве имён?

const constinit auto x = 42;
constexpr auto y = 42;

Ответы (1 шт):

Автор решения: HolyBlackCat

Конкретно эти ничем не отличаются, даже если убрать constinit, потому что const целочисленные переменные с constexpr инициализатором автоматически становятся constexpr.

В общем случае, разница, конечно, есть.

constinit максимум вызывает ошибку компиляции, если инициализатор не constexpr. А если constexpr, то он ничего не делает1, поэтому разница такая же, как между const и constexpr переменными.


Интересная особенность - constinit проверяет только инициализацию на constexpr-ность, а constexpr дополнительно проверяет деструктор.


1 Не считая хитрой оптимизации для thread_local переменных: https://en.cppreference.com/w/cpp/language/constinit

→ Ссылка