nehme ich habe folgendes:Zuordnung und Referenz Initialisierung von einem temporären
boost::unordered_map< string , someValueType > map;
someValueType& value = map[ "key" ] = someValueType();
die letzte Zeile enthält:
- eine temporäre konstruiert Instanz
someValueType
- eine Zuweisung der temporären in eine neuer Karteneintrag
- Initialisierung eines Verweises auf den Karteneintrag
also, wenn nächste Zeile ist:
value.someProperty = 42;
dies wird versuchen, die Karte Eintrag rechts zu ändern? nicht das ursprüngliche temporäre?
Ich weiß in diesem Fall, wenn die Referenz ein temporäres nicht dauern konnte, weil es nicht const ist (so ein Compiler-Fehler oder die Abwesenheit von einem würde meine Frage beantworten), aber wenn ich das const zur Referenzdeklaration hinzufüge, Ich bin mir nicht sicher, was die Bewertungsregeln in diesem Fall sagen würden
Dank Kerrek, gibt es eine Möglichkeit, ein neues Element in der Karte ohne das temporäre zu erstellen? etwas wie emplace Initialisierung? – lurscher
@lurscher: [Ja] (http://en.cppreference.com/w/cpp/container/unordered_map/emplace), aber kein Compiler, den ich kenne, unterstützt es noch. (Alle assoziativen Container haben 'emplace' im neuen Standard.) –
@Irfy: Ich meinte nur, dass ich keinen Compiler + Bibliothek kenne, der an dieser Stelle die Assoziative-Map-Einordnung implementiert. Es ist im Standard, also wird es kommen, aber praktisch ist es noch nicht weit verbreitet. –