"constinit" 和 "constexpr" 之间的真正区别是什么?

What's the real difference between "constinit" and "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() {}

如上面的代码所示,我找不到 constinitconstexpr 之间的任何区别。

constinitconstexpr的真正区别是什么?


更新:

相关的没有明确说明constinitconstexpr的区别。

一个constinit变量是常量初始化的,但它不能用在常量表达式中,甚至不能自动常量。您的 main 可以合法地包含此行

c2 = 2; 

是的,初始化后可以修改