Warum gibt QMap :: operator [] (const Schlüssel & Schlüssel) als Wert zurück?

8

Ich habe festgestellt, dass die QMap::operator[](const Key & key) diese beiden Überladungen :

%Vor%

Gibt es einen Grund für die Rückgabe nach Wert?

Und da wir eine Bewegungssemantik haben:

Wenn wir nach Wert zurückgeben, sollten wir jemals einen konstanten Wert zurückgeben?

Der Grund, warum ich frage, ist dies:

Stellen Sie sich vor, wir haben:

%Vor%     
Martin Drozdik 29.08.2013, 06:28
quelle

2 Antworten

11

Im Fall const können wir der const -Karte kein Element hinzufügen, wenn es nicht bereits existiert, daher wird ein lokales Objekt zurückgegeben.

Andernfalls wird in dem Fall nicht const ein Element mit dem angegebenen Schlüssel erstellt (falls es noch keinen gibt), bevor ein Verweis darauf zurückgegeben wird.

    
Andrii 29.08.2013, 06:49
quelle
0
___ answer18504035 ___

Im Fall const können wir der map -Karte kein Element hinzufügen, wenn es nicht bereits existiert, daher wird ein lokales Objekt zurückgegeben.

Andernfalls wird in dem Fall nicht const_cast<ExpensiveToCopy>map[4] ein Element mit dem angegebenen Schlüssel erstellt (falls es noch keinen gibt), bevor ein Verweis darauf zurückgegeben wird.

    
___ qstnhdr ___ Warum gibt QMap :: operator [] (const Schlüssel & Schlüssel) als Wert zurück? ___ tag123qt ___ Qt ist ein plattformübergreifendes Anwendungsentwicklungs-Framework, das häufig für die Entwicklung von Anwendungssoftware verwendet wird, die auf verschiedenen Software- und Hardwareplattformen ohne oder mit nur geringer Änderung der zugrundeliegenden Codebasis ausgeführt werden kann. Qt ist sowohl mit kommerziellen als auch mit Open-Source-Lizenzen verfügbar. ___ answer18505205 ​​___

Ich denke, die Nicht-Referenz map[4] soll sicherstellen, dass der Client-Code map[4] auf keine Weise ändern kann. Sie wissen, wenn Sie map oder andere Möglichkeiten verwenden, können wir weiterhin %code% ändern, aber diese %code% ist keine Referenz auf das vierte Element von %code% .

    
___ tag123c ___ C ++ ist eine universelle Programmiersprache. Es wurde ursprünglich als Erweiterung von C entworfen und behält eine ähnliche Syntax, ist aber jetzt eine komplett andere Sprache. Verwenden Sie dieses Tag für Fragen zu Code, der mit einem C ++ - Compiler kompiliert werden soll. ___ tag123c11 ___ C ++ 11 ist eine 2011 verabschiedete Version des C ++ - Sprachstandards. Sie hat viele Änderungen und Ergänzungen der Kernsprache sowie der verbesserten und erweiterten C ++ - Standardbibliothek vorgenommen. ___ qstntxt ___

Ich habe festgestellt, dass die %code% diese beiden Überladungen :

%Vor%

Gibt es einen Grund für die Rückgabe nach Wert?

Und da wir eine Bewegungssemantik haben:

Wenn wir nach Wert zurückgeben, sollten wir jemals einen konstanten Wert zurückgeben?

Der Grund, warum ich frage, ist dies:

Stellen Sie sich vor, wir haben:

%Vor%     
___
john zhao 29.08.2013 07:55
quelle

Tags und Links