В чем реальная разница между "constinit" и "constexpr"?

constexpr int f() { return 0; }
int g() { return 0; }

constexpr auto c1 = f(); // OK
constinit auto c2 = f(); // OK

constexpr auto d1 = g(); // ill-formed
constinit auto d2 = g(); // ill-formed

int main() {}

Как показано в приведенном выше коде, я не могу найти никакой разницы между constinit а также constexpr.

Какая реальная разница между constinit а также constexpr?


Обновить:

Связанное с чемconstinitв C++20? не указывает четко разницу междуconstinit а также constexpr.

1 ответ

Решение

А constinitпеременная инициализируется константой, но она не может использоваться в постоянном выражении или даже автоматически константа. Вашmain может юридически содержать эту строку

c2 = 2; 

Да, модификация возможна после инициализации.

Другие вопросы по тегам