1

@Vittorio Romeo对这个问题的回答很好地解释了。在他的回答中,提到了以下内容:constinit

constexpr不等同于const constinit,因为前者要求不断破坏,而后者则不然。

虽然很清楚,但我看不到任何实际用途。在这种情况下会const constinit使用,但constexpr不能。在我能想到的任何情况下,对于在运行时通过 可以更改和不能更改的任何类型Tconstinit常量const破坏应该是一个微不足道的限制添加。我错过了什么吗?

4

2 回答 2

0

如果您依赖外部代码,无论出于何种原因都无法更改,它看起来像这样

struct A {
  ~A() {}
};

这意味着它A不是文字类型,因为它没有constexpr析构函数(很可能是疏忽)。然而,它可以在编译时构建,因此是一个constinit.

于 2021-07-02T12:53:11.790 回答
0

一个可能的实际案例:

struct AtExit
{
    ~AtExit() { std::cout << "End"; }
};

演示

(通过使用仿函数模板类更有用)。

于 2021-07-02T12:53:52.003 回答