Warum wird ein Standardkonstruktor bei map gebraucht?
-
Hallo zusammen,
warum wird hier ein Standardkonstruktor gebraucht:
class Foo { public: Foo(double d) { } }; std::map<int, Foo> bar; bar[5] = Foo(4.4);
-
Weil der Compiler nur dann automatisch einen Standard-CTor generiert, wenn du selbst keinen CTor deklarierst.
-
Jo, das war mir bewußt.
Aber warum wird beim Einfügen üben den operator [] der map ein Standardkonstruktor gebraucht?
-
Weil der operator[] eine Instanz von Foo erzeugen muss.
-
bar[5] = Foo(4.4); ist eine Zuweisung, und als solche nur auf bereits existente Objekte anwendbar. Der operator[] der map erzeugt also mit dem Standardkonstruktor ein Objekt, und gibt eine Referenz darauf zurück.
Mit insert müsste man da drumherum kommen.