boost_multi_index迭代器取消引用给出常量
boost_multi_index iterator dereference gives const
这与迭代器的取消引用boost_multi_index hashed_index有关。请参阅下面的代码:
using namespace boost;
using namespace boost::multi_index;
using Container = boost::multi_index_container<
std::string,
indexed_by<hashed_unique<const_mem_fun<std::string, size_t, &std::string::size>>>>;
Container container;
auto& hash_map = container.get<0>();
auto[it, inserted] = hash_map.insert("1234");
if (!inserted)
*it = "1234";
这给了:
error: no match for 'operator=' (operand types are 'const value_type {aka const std::__cxx11::basic_string<char>}' and 'const char [5]')
*it = "1234";
^~~~~~
因此,看起来可以在迭代器it
引用的对象上仅调用 const 方法。
- 为什么要这样做?(容器是否能够跟踪所有更改?
- 有没有更好/另一种方法来写入引用的对象?
Boost.MultiIndex 迭代器是常量(不会给你对元素的非常量访问权限(,因为否则值可能会在拥有multi_index_container
不知道的情况下更改,这会导致元素错位、未定义的行为等。例如,这与std::set
中的迭代器的情况相同。
要修改元素,此处讨论了各种功能。请注意,该文档是 C++11 之前的,没有提到将 lambda 表达式与modify
结合使用,如下所示:
hash_map.modify(it,[](std::string& x){x="1234";});
相关文章:
- 什么时候在C++中返回常量引用是个好主意
- 通过常量引用传递参数的矩阵模板类
- 在C++中使用非常量引用作为常量
- 具有常量引用参数的函数模板专用化
- 多个"常量引用"变量可以共享同一个内存吗?
- 为什么 STL 容器适配器堆栈中的 top 返回常量引用?
- 为什么常量方法可以采用非常量引用?
- 为什么当我们有常量引用时创建临时对象?
- 如何返回向量的常量引用?
- C++:常量引用参数
- 不同于按值传递和常量引用传递的程序集
- 为什么const_cast和static_cast常量引用没有效果?
- C++ 获取函数在常量引用中按值返回的结果
- 从 BubbleSort* 类型的右值初始化 'AssortedSorter&' 类型的非常量引用无效"
- C++ 在类中使用常量引用文本时 O2 内存泄漏
- 是否可以跨 dll 边界返回常量引用/指向 std::vectors?
- C++中大多数/所有 setter 函数的参数是否应该写为常量引用?
- 通过非常量引用参数修改常量引用参数
- 将常量引用传递给线程
- 为什么C++中没有常量引用,就像常量指针一样?