【发布时间】:2015-01-17 15:58:08
【问题描述】:
我用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()
}
【问题讨论】:
-
因为如果它不存在,它需要构造一个“空”对象。否则,当指定的键不存在时,它可能会返回什么?
-
map的[]操作符尝试访问指定的索引,如果没有找到,它会在指定的索引处为你创建一个,设置为映射值类型的默认值,在这种情况下调用构造函数
-
表达式
m["1"]的值应该是多少? -
然而,即使我写成:m["1"] = A(1); A() 仍然会被调用。
-
@KaiWang 是的,它会的,原因完全相同。这里没有任何问题。