"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() {}
如上面的代码所示,我找不到 constinit
和 constexpr
之间的任何区别。
constinit
和constexpr
的真正区别是什么?
更新:
相关的没有明确说明constinit
和constexpr
的区别。
一个constinit
变量是常量初始化的,但它不能用在常量表达式中,甚至不能自动常量。您的 main
可以合法地包含此行
c2 = 2;
是的,初始化后可以修改
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
和constexpr
的区别。
一个constinit
变量是常量初始化的,但它不能用在常量表达式中,甚至不能自动常量。您的 main
可以合法地包含此行
c2 = 2;
是的,初始化后可以修改