关于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::vector
的operator[]
带来了问题
std::vector<T>
的operator[]
应当返回一个T&
,但是C++禁止对bit
s的引用。无法返回一个bool&
,std::vector<bool>
的operator[]
返回一个行为类似于bool&
的对象。要想成功扮演这个角色,bool&
适用
的上下文std::vector<bool>::reference
也必须一样能适用。在std::vector<bool>::reference
的特性中,使这个原则可行的特性是一个可以向bool
的隐式转化。(不是bool&
,是**bool
**。要想完整的解
释std::vector<bool>::reference
能模拟bool&
的行为所使用的一堆技术可能扯得太远了,所以这里简单地说隐式类型转换只是这个大型马赛克的一小块)
参考书籍:EffectiveModernCpp
标签:
c++
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)