gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:38:33 26 4
gpt4 key购买 nike

我想知道为什么 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com