繁体   English   中英

构造一个constexpr std :: weak_ptr

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM