簡體   English   中英

為什么C ++標准為std :: bitset :: reference指定了析構函數?

[英]Why does the C++ standard specifies a destructor for std::bitset::reference?

我想知道為什么std::bitset::referencestd::vector<bool>::reference指定一個顯式的析構函數(不是編譯器生成的析構函數)。 因為,例如, boost::dynamic_bitset::reference似乎沒有指定這樣的析構函數。

僅僅因為標准提到~reference()作為析構函數,並不意味着必須將用戶提供為no-op {} (這是libstdc ++SGI / STL的用法 )。 它也可以是用戶聲明為=default ,或者甚至是隱式定義的(這是libc ++的用法 )。 無論如何,可以更新標准以明確提及析構函數被刪除。 您可以提交編輯更改(我認為它不保證真正的提案)。

正如@BoPersson在評論中所指出的, std::bitset是標准庫的一個非常古老的組件。 它的許多功能(來自無符號整數的隱式構造函數,成員而不是非成員operator== )早於1998年的語言標准化。無恥的插件:請參閱此問答,以獲得更多討論如何產生這種情況,以及此問答為什么它會在修復時破壞代碼。

<rant mode>

退出std::bitset遺留問題的最佳方法是在namespace experimental徹底解決。 優選地,這也將解決std::bitset的混合抽象,其同時試圖成為array<bool>的空間優化版本以及set<int> 理想情況下,會有一個bool_array<N>bounded_int_set<N>的提議,它們提供了這些抽象。 類似地,可以bool_vector<Alloc> (當前稱為vector<bool, Alloc> )和int_set<Alloc> (當前是boost::dynamic_bitsetboost::container::flat_set<int, Alloc> )。

</rant mode>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM