В каком практическом случае полезно использовать «const constinit»?
Ответ на этот вопрос от Vittorio Romeo очень хорошо объясняет. В его ответе упоминается следующее:
не эквивалентен, поскольку первое требует постоянного разрушения , а второе - нет.
Хотя это довольно ясно, я не вижу в этом практического применения. В этом случае
const constinit
использоваться, но
constexpr
не мог. В любом случае, который я могу придумать, для любого типа
T
это может быть
constinit
и не может быть изменен во время выполнения с помощью
const
, постоянное разрушение должно быть тривиальным ограничением. Я что-то пропустил?
2 ответа
Если у вас есть зависимость от внешнего кода, который вы не можете изменить по какой-либо причине, и это выглядит так:
struct A {
~A() {}
};
Это будет означать, что
A
не буквальный тип, потому что у него нет
constexpr
деструктор (скорее всего оплошность). Однако он может быть построен во время компиляции и, следовательно, может быть
constinit
.
Возможный практический случай:
struct AtExit
{
~AtExit() { std::cout << "End"; }
};
(Более полезно при создании шаблона класса с функтором).