Чем отличается constexpr от const constinit?
Чем отличаются объявления в глобальном пространстве имён?
const constinit auto x = 42;
constexpr auto y = 42;
Ответы (1 шт):
Конкретно эти ничем не отличаются, даже если убрать constinit, потому что const целочисленные переменные с constexpr инициализатором автоматически становятся constexpr.
В общем случае, разница, конечно, есть.
constinit максимум вызывает ошибку компиляции, если инициализатор не constexpr. А если constexpr, то он ничего не делает1, поэтому разница такая же, как между const и constexpr переменными.
Интересная особенность - constinit проверяет только инициализацию на constexpr-ность, а constexpr дополнительно проверяет деструктор.
1 Не считая хитрой оптимизации для thread_local переменных: https://en.cppreference.com/w/cpp/language/constinit