我目前正在调试一个开源游戏中的崩溃问题,违规行似乎是这样的:
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/