我想知道为什么 std::bitset::reference
和 std::vector<bool>::reference
指定一个显式析构函数(不是编译器生成的析构函数)。因为,例如, boost::dynamic_bitset::reference
似乎没有指定这样的析构函数。
最佳答案
只是因为标准提到了 ~reference()
作为析构函数,并不意味着它必须作为空操作由用户提供 {}
(这就是 libstdc++ 和 SGI/STL 的做法)。它也可以由用户声明为 =default
,甚至是隐式定义(libc++ 就是这样做的)。无论如何,可以更新标准以删除对析构函数的明确提及。您可以提交编辑更改(我认为这不值得提出真正的建议)。
正如@BoPersson 在评论中指出的那样,std::bitset
是标准库中一个非常古老的组件。它的许多功能(无符号整数的隐式构造函数,成员而不是非成员 operator==
)早于 1998 年的语言标准化。无耻的插件:参见例如this Q&A有关这可能是如何发生的更多讨论,以及this Q&A为什么当这个问题被修复时它可能会破坏代码。
<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>
关于c++ - 为什么C++标准要为std::bitset::reference指定一个析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34359468/