簡體   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