[英]Why does the C++ standard specifies a destructor for std::bitset::reference?
我想知道為什么std::bitset::reference
和std::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_bitset
和boost::container::flat_set<int, Alloc>
)。
</rant mode>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.