首页 > 其他分享 >关于std::vector<bool>的一些细节

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

时间:2023-06-08 17:35:48浏览次数:33  
标签:std 返回 reference 细节 vector bool operator

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

标签:std,返回,reference,细节,vector,bool,operator
From: https://www.cnblogs.com/Explosion556/p/17467167.html

相关文章

  • 其他细节:并发并行
        ......
  • 关于input( )和sys.stdin.readline( )的区别
    sys.stdin.readline()会将标准输入全部获取,包括末尾的'\n',input()会把‘\n’忽略sys.stdin.readline().strip() 去掉末尾的换行符, importsysa=sys.stdin.readline().strip()b=input()print(a,type(a))print(b,type(b))#678<class'str'>#678<clas......
  • C++11中的std::function
    看看这段代码先来看看下面这两行代码:std::function<void(EventKeyboard::KeyCode,Event*)>onKeyPressed;std::function<void(EventKeyboard::KeyCode,Event*)>onKeyReleased;这两行代码是从Cocos2d-x中摘出来的,重点是这两行代码的定义啊。std::function这是什么东西?如果你对上......
  • 为什么在stdio.h写自定义的宏不行?
    在自定义的头文件写可以: 这样写不行: ......
  • 银河麒麟KylinV10安装FastDFS单机版与FastDFS集群搭建
    一、FastDFS介绍1.1.简介FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。FastDFS为互联网量身定制,充分考虑了冗......
  • dubbo源码学习(四)初始化过程细节:解析服务
    今天将真正去看dubbo内部的实现过程,看dubbo的源码前我先把dubbo的用户指南和开发指指南大概的看了一遍,这样再看dubbo源码比较轻松。从用户指南和开发指指南可以找到相应的切入点,今天将介绍的是dubbo的初始化解析bean的过程:解析服务基于dubbo.jar内的META......
  • 使用Scanner 的一些细节
    使用Scanner的一些细节String转换成 Int intvalue-interger.parseInt();int转换成StringSystem.out.println(数字+“字符”);  ......
  • 理解C++底层细节
    理解C++底层细节C++是一门广泛使用的高级编程语言,其语法优雅且易于使用,拥有着强大的面向对象特性以及丰富的标准库。但是,在理解C++的本质之前,我们需要先了解C++的底层细节。C++中的内存管理在C++中,内存管理和分配是至关重要的内容。常见的内存管理问题包括内存泄漏、内存溢出和野指......
  • 使用openresty替换线上nginx网关之openresty安装细节
    背景线上跑了多年的一个网关业务,随着部门的拆分,逐渐有了一个痛点。该网关业务主要处理app端请求,app端发起的请求,采用http协议,post方法,content-type采用application/x-www-form-urlencoded,表单中有一个固定的字段,叫功能号,即funcNo=1000100这样,然后表单中其他业务字段就根据funcNo......
  • leetcode2352二维vector的操作
    对于二维vector有分外层和内层:当初始化指定了外层大小(行数)时,添加元素写法:错误写法:不能使用[]vector<vector<int>>v(3);//指定外层数目for(inti=0;i<3;++i){for(intj=0;j<n;++j){v[i][j]=0;}}正确写法:vector<vector<int>>v(3);//指定外层数目......