Por que o operador [] do mapa C ++ está chamando o construtor padrão do valor mapeado? [duplicado
Esta pergunta já tem uma resposta aqui:
Por que o argumento do tipo de mapa C ++ requer um construtor vazio ao usar []? 5 respostasCompilei o seguinte código com g ++, a função de construção A () será chamada ao executar a linha:
m["1"]
Por que isso está acontecendo? Não vejo necessariamente a necessidade de chamar o construtor aqu
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()
}