在 VS 调试器中查看映射条目
Posted
技术标签:
【中文标题】在 VS 调试器中查看映射条目【英文标题】:Watching map entries in VS debugger 【发布时间】:2018-10-30 21:41:04 【问题描述】:我想知道这是否是我的错误/误解(很可能)或其他原因。
我在 VS 2017 社区中有以下代码:
#include <map>
int main()
std::map<int, int> myMap;
myMap[1] = 4;
myMap[4] = 2;
return 0;
现在,当我调试时,我想尝试查看我得到的地图的某些条目
myMap[1] no operator "[]" matches these operands
为什么会这样?我不确定。
【问题讨论】:
您是否正在调试优化的构建?调试优化代码通常会令人惊讶,因为生成的代码可能与原始 C++相当不同,而且许多东西可以被优化掉并切换。尝试调试版本。 它在调试配置中 人们是否可以至少评论一下为什么? 赌的是那些不明白你在问什么的人。我明白了。看来 Jesper 和 Caleth 明白了。而且看起来 Caleth 打字的速度比我快。 【参考方案1】:调试器将myMap
视为const
。这是为了阻止你改变状态来观察它。
[]
的两个重载是
T& operator[]( const Key& key );
T& operator[]( Key&& key );
它们都不能在 const map
上调用,因为它们会插入一个默认构造条目以在 key
不存在时返回。
您可以改用at
,如果key
不存在则抛出,因此有const
限定的重载
const T& at( const Key& key ) const;
【讨论】:
【参考方案2】:在这里,您已将地图的名称声明为“map”。因为地图对象类型已经使用了名称“地图”,所以不能以这种方式使用它。
如果您将地图名称更改为其他名称,例如
std::map<int, int> myMap
并使用该名称而不是单词“map”来调用它,您应该会看到您所期望的行为
【讨论】:
这没什么区别 而std::map
与map
是不同的野兽。以上是关于在 VS 调试器中查看映射条目的主要内容,如果未能解决你的问题,请参考以下文章