В чем реальная разница между 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.


person xmllmx    schedule 18.06.2020    source источник
comment
@ E_net4thedupefinder, ответ в вашей ссылке не указывает четко разницу между constinit и constexpr.   -  person xmllmx    schedule 18.06.2020
comment
Да. Самый первый ответ подробно описывает, что constexpr влечет за собой и как constinit не подразумевает большинство из этих вещей.   -  person Nicol Bolas    schedule 18.06.2020


Ответы (1)


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

c2 = 2; 

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

person StoryTeller - Unslander Monica    schedule 18.06.2020