我用g++编译了以下代码,执行该行时将调用构造函数A():
m["1"]
为什么会发生这种情况?我认为没有必要在这里调用构造函数。
struct A
{
int mem;
A(int arg){}
A(){}
};
int main()
{
unordered_map<string, A> m;
m["1"]; // will call A(), but why?
m.find("1")->second; // will not call A()
}
这就是设计的operator[]。如果他没有找到您正在查看的值,则会使用默认构造函数创建该条目。
如果你想查看一个元素是否存在而不需要创建它,你可以使用find()反而。
如果你想像你一样处理一个元素operator[]
但如果找不到该元素,则抛出异常,而不是创建丢失的条目,您更喜欢at()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)