在 lambda 表达式中自动推导出的类型是什么,用于修改 bool 类型的向量(特殊容器)
What's type deduced by auto in lambda expression used to modify a vector of type bool (special container)
我想通过引用更改std::vector<bool>
中一个变量的状态,但这不起作用std::vector<bool>
因为它是一个代理对象。但是,当我尝试使用lambda expression
更改它时,我可以修改它。下面是一个示例:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main(int argc, char **argv)
{
vector<bool> v(10, true);
auto modify_bool = [](auto b){ b = false; };
modify_bool(v[1]);
for(bool b:v)
cout << b << endl;
return 0;
}
我可以看到v[1]
已更改为false
.我的问题是modify_bool
和b
auto
推断出的类型是什么?
在非常量vector
对象上调用 std::vector<T>::operator[]
返回 std::vector<T>::reference
,在大多数情况下是T&
。
但是,在std::vector<bool>
的情况下,其内部存储可以优化为将多个bool
作为位存储在单个字节中,而不是使用普通的bool[]
数组,在这种情况下reference
不能是正常的bool&
。相反,它是一个代理对象,它operator=
和operator bool()
实现来分配/读取vector
内部表示中的特定bool
元素。
该代理的类型未指定且特定于实现,但auto
仍然可以推断出它。
相关文章:
- 基类类型向量中的派生结构
- 从自定义数据类型向量中删除重复元素
- C++:自定义数据类型向量错误的队列
- C++ - 按自定义数据类型向量的值删除元素
- 在 C++ 中创建类型向量
- 添加字符串向量和不同数据类型向量的映射
- 初始化一个类型向量的巨大向量<int>
- 没有操作员=的类型向量的实例化
- 复杂数据类型向量的迭代器
- 比较两个用户定义的类型向量
- 如何声明二维模板化类类型向量?
- 尝试将用户定义的向量类型插入用户定义的类型向量
- 类类型向量的打印内容
- 如何在 C++ 中将结构类型向量数据输入到结构向量成员(嵌套结构向量)中
- 如何使用新字符串而不是分配器创建自己的字符串类型向量?
- <T> 在使用运算符+ 连接两个向量之前从类型向量中删除索引
- 从自定义数据类型向量数组C 删除
- 如何打印类型向量<元组<字符串、int、int>> 以筛选 c++?
- 正在输出类型向量的成员类型
- 引用类类型向量中的对象成员