关于std::vector<bool>的一些细节

std::vector<T>是我们经常用到的STL容器,但是std::vector<bool>比较特殊,其特殊之处在于operato[]返回的元素类型是std::vector<bool>::reference(一个嵌套于std::vector<bool>中的类)。

std::vector<bool>::reference之所以存在是因为std::vector<bool>规定了使用一个打包形式(packed form)表示它的bool,每个bool占一个bit。那给

std::vectoroperator[]带来了问题

std::vector<T>operator[]应当返回一个T&,但是C++禁止对bits的引用。无法返回一个bool&std::vector<bool>operator[]返回一个行为类似于bool&的对象。要想成功扮演这个角色,bool&适用

的上下文std::vector<bool>::reference也必须一样能适用。在std::vector<bool>::reference的特性中,使这个原则可行的特性是一个可以向bool的隐式转化。(不是bool&,是**bool**。要想完整的解

std::vector<bool>::reference能模拟bool&的行为所使用的一堆技术可能扯得太远了,所以这里简单地说隐式类型转换只是这个大型马赛克的一小块)

 

参考书籍:EffectiveModernCpp

posted @   _Explosion!  阅读(368)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示