c++ - 你应该为 std::unordered_map 迭代器使用引用吗?

标签 c++ c++11 for-loop reference

我目前正在调试一个开源游戏中的崩溃问题,违规行似乎是这样的:

for( auto &special: special_attacks ) {

其中special_attacks定义如下:

std::unordered_map<std::string, mon_special_attack> special_attacks;

我怀疑这里的问题是因为 special 是一个迭代器而不是一个值,所以这段代码实际上可能正在创建对内部 special_attacks.begin( ) 调用。省略 & 会导致功能代码(修改 special.second 也会修改 unordered_map 中的拷贝)这一事实支持了这种怀疑>).

那么当迭代 std::unordered_map 时,我们是否应该始终使用迭代器的值而不是引用?

最佳答案

...since special is an iterator rather than a value...

不,不是。 special_attacks 的值类型将是 std::pair<const std::string, mon_special_attack> , 所以 auto& special将具有类型 std::pair<const std::string, mon_special_attack>& (可能引用 const)。那不是迭代器-您的错误在其他地方。

根据您的描述,我怀疑 special_attacks实际上是 const ,因此您通过 const 引用修改值的尝试无法编译。

关于c++ - 你应该为 std::unordered_map 迭代器使用引用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34269593/

相关文章:

带有 std::map 的 C++ vector ?

c++ - 名称查找和运算符重载如何工作?

c++ - 模板参数中的 is_base_of - 类不命名类型

c++ - "surprising"常量初始化因为定义顺序

java - 我希望数组能记住这一切

c++ - 给定二叉树,设计一种算法,该算法创建每个深度的所有节点的链表

c++ - 无法在 Solaris 的最新编译器中将 xercesc 与新的 c+11 标志一起使用

c++ - 可以容纳任何 POD 的 vector

c++ - 如何使用 break 语句停止内循环和外循环

python - 嵌套 for 循环 : why is the inner loop only executed once?