[英]Constructing a constexpr std::weak_ptr
根据std::weak_ptr
文档,可以构造一个constexpr
weak_ptr
:
#include <memory>
constexpr weak_ptr<int> foo{};
但是,使用clang尝试此操作会产生编译错误,抱怨constexpr变量不能具有非文字类型' const std::weak_ptr<int>
',这是因为weak_ptr<int>
具有用户提供的析构函数。 (确实如此,查看libc ++标头)
我的问题是,这是一个libc ++错误,还是constexpr
weak_ptr
只是没有意义,并且constexpr默认构造函数是错误的? 我可以期待这种情况在未来发挥作用吗?
这是一个libc ++错误
没有。
constexpr
weak_ptr
只是毫无意义
是。
拥有constexpr默认构造函数是一个错误?
在非文字类型上使用的constexpr
构造函数允许对静态和线程存储持续时间变量进行常量初始化 ,这在任何动态初始化之前发生。
这意味着,例如,始终初始化全局默认构造的weak_ptr
对象,并且可以安全地在全局对象的构造函数中使用。
// TU 1
namespace foo {
std::weak_ptr<int> meow;
}
// TU 2
namespace foo {
extern std::weak_ptr<int> meow;
}
struct C {
C() { /* can safely use foo::meow here */ }
} c;
我可以期待这[
constexpr
weak_ptr
]将来constexpr
吗?
没有。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.