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

时间:2020-06-18 07:22:25

标签: c++ constexpr semantics c++20 constinit

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之间的真正区别是什么?


更新:

相关的What is constinit in C++20?并未明确说明constinitconstexpr之间的区别。

1 个答案:

答案 0 :(得分:4)

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

c2 = 2; 

是的,初始化后可以修改。