为什么C标准为std :: bitset :: reference指定了析构函数?

我想知道为什么std::bitset::referencestd::vector<bool>::reference指定一个显式析构函数(不是编译器生成的析构函数).因为,例如,boost::dynamic_bitset::reference似乎没有指定这样的析构函数.
最佳答案
仅仅因为标准提到~reference()作为析构函数,并不意味着它必须是用户提供的no-op {}(这是libstdc++SGI/STL如何做到的).它也可以是用户声明为= default,或者甚至是隐式定义的(这是libc++的工作方式).无论如何,可以更新标准以明确提及析构函数被删除.您可以提交编辑更改(我认为它不保证真正的提案).

正如@BoPersson在评论中所指出的,std :: bitset是标准库的一个非常古老的组件.它的许多特性(来自无符号整数的隐式构造函数,成员而不是非成员运算符==)在1998年之前的语言标准化之前.无耻插头:参见例如this Q&A更多讨论了这可能是如何产生的,以及this Q&A为什么它可能会在修复时破坏代码.

< rant mode>

退出std :: bitset遗留问题的最佳方法是在名称空间实验中彻底解决.优选地,这也将解决std :: bitset的混合抽象,其同时试图成为阵列的空间优化版本< bool>以及一组< 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>

转载注明原文:为什么C标准为std :: bitset :: reference指定了析构函数? - 代码日志