c++ - 为什么C++标准要为std::bitset::reference指定一个析构函数?

标签 c++ c++11 reference destructor std-bitset

我想知道为什么 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_bitsetboost::container::flat_set<int, Alloc> 的混合体)可以被定义。

</rant mode>

关于c++ - 为什么C++标准要为std::bitset::reference指定一个析构函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34359468/

相关文章:

c++ - 如何使用自定义删除器创建 unique_ptr 数组?

c++ - 如何 `decltype` 仿函数运算符()?

c++ - 模板元编程帮助 : transforming a vector

Python:为什么这个列表列表包含引用而不是副本?

design-patterns - 惯用的元编程

c++ - 如何在类中声明自定义比较函数?

c++ - 具有重载的矩阵。不能使用多个运算符

c++ - 创建排序 vector 的索引 vector

lambdas 的 C++ vector - undefined reference

c++ - 返回局部变量的引用