gpt4 book ai didi

c++ - 如何检测构造函数是否真的是 constexpr,以便我可以使用静态初始化?

转载 作者:行者123 更新时间:2023-11-30 02:17:23 26 4
gpt4 key购买 nike

看这段代码:

struct NonConstexpr {
NonConstexpr() { }
};

template <typename T>
struct Bar {
NonConstexpr nonConstexpr;

constexpr Bar() { }
};

struct Foo {
Bar<void> bar;

constexpr Foo() { }
};

在这段代码中,Foo的构造函数被标记为constexpr,但它不能出现在常量表达式中,因为它实际上不能满足this的要求。您可以在我的 previous question 中阅读详细信息.

我的问题是:我能否在编译时以某种方式检测到 Foo 的构造函数实际上不会像 constexpr 那样运行?

我问这个的原因是,我想检测 Foo 的全局变量是否会被静态初始化(我想放一个 static_assert在这一点上,因为我的全局 Foo 对象必须静态初始化)。

请注意,临时将 constexpr 添加到变量的直接解决方案不起作用,因为我的 Foo 具有非平凡的析构函数。

最佳答案

如果您使用的是 Clang,请在变量上使用 [[clang::require_constant_initialization]]。否则,我不知道有什么办法。

委员会正在考虑将其标准化为关键字。

关于c++ - 如何检测构造函数是否真的是 constexpr,以便我可以使用静态初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53632120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com