微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在哪种实际情况下“const constinit”有用?

如何解决在哪种实际情况下“const constinit”有用?

this@Vittorio Romeo 问题的回答很好地解释了 constinit。在他的回答中,提到了以下几点:

constexpr 不等同于 const constinit,因为前者要求持续销毁,而后者不要求。

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

解决方法

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

struct A {
  ~A() {}
};

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

,

一个可能的实际案例:

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

Demo

(使用函子模板化类更有用)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。