¿Por qué el operador [] de C ++ Map llama al constructor predeterminado de valor mapeado? [duplicar
Esta pregunta ya tiene una respuesta aquí:
¿Por qué el argumento del tipo de mapa C ++ requiere un constructor vacío cuando se usa []? 5 respuestasCompilé el siguiente código con g ++, se llamará a la función de construcción A () al ejecutar la línea:
m["1"]
¿Por qué está pasando esto? No veo necesariamente que llame al constructor 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()
}