地图<int,int> 默认值

新手上路,请多包涵
std::map<int,int> mapy;
++mapy[5];

假设 mapy[5] 将始终为 1 是否安全?我的意思是,即使没有像我的代码那样明确声明, mapy[5] 总是在“++”之前获得默认值 0?

原文由 Bill Kotsias 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 546
2 个回答

只要您使用 [] 运算符访问地图,如果该键不存在,它就会被添加。 int 被调用“值初始化” - 所以它会得到一个值 0。

原文由 rep_movsd 发布,翻译遵循 CC BY-SA 4.0 许可协议

是的,可以安全地假设。

地图的 operator[] 是这样指定的: ([map.access])

效果: 如果地图中没有与 x 等效的键,则将 value_type(std::move(x), T()) 插入地图。

返回: 对 --- 中的 mapped_type 对应的 x*this

T() 对所有 T 使用 _值初始化_,除了 void([expr.type.conv]/2) ,和 - 初始值 为零-初始化([dcl.init]/7)

因此,表达式的计算结果为对值为零的对象的引用([dcl.init]/5) 。

operator++ 调用然后将该对象增加到一,并计算为一。

(所有参考都是 C++11。)

原文由 Lightness Races in Orbit 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏