std::map<int,int> mapy;
++mapy[5];
假设 mapy[5]
将始终为 1 是否安全?我的意思是,即使没有像我的代码那样明确声明, mapy[5]
总是在“++”之前获得默认值 0?
原文由 Bill Kotsias 发布,翻译遵循 CC BY-SA 4.0 许可协议
std::map<int,int> mapy;
++mapy[5];
假设 mapy[5]
将始终为 1 是否安全?我的意思是,即使没有像我的代码那样明确声明, mapy[5]
总是在“++”之前获得默认值 0?
原文由 Bill Kotsias 发布,翻译遵循 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 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
只要您使用 [] 运算符访问地图,如果该键不存在,它就会被添加。 int 被调用“值初始化” - 所以它会得到一个值 0。