Gibt es einen Unterschied zwischen std :: mapint, int und std :: mapconst int, int?

8

Nach meinem Verständnis kann der Schlüssel in einem Wertpaar in einer std :: map nach dem Einfügen nicht mehr geändert werden. Bedeutet dies, dass das Erstellen einer Map mit dem Schlüsselvorlagenargument als const keine Auswirkung hat?

%Vor%     
Matt Price 11.08.2009, 11:38
quelle

4 Antworten

13

Die Antwort auf Ihre Titelfrage ist ja. Da ist ein Unterschied. Sie können ein std::map<int, int> nicht an eine Funktion übergeben, die ein std::map<const int, int> übernimmt.

Das funktionale Verhalten der Karten ist jedoch identisch, auch wenn sie unterschiedliche Typen sind. Dies ist nicht ungewöhnlich. Int und Long verhalten sich in vielen Kontexten gleich, obwohl sie formal unterschiedliche Typen sind.

    
MSalters 11.08.2009, 14:39
quelle
1

da int nach Wert kopiert wird, hat diese Deklaration von const keinen Sinn. Auf der anderen Seite

%Vor%

ändert dramatisch ein Bild

    
Dewfy 11.08.2009 11:44
quelle
1

std::map baut trotzdem seinen Schlüsseltyp auf: std::map<int, int>::value_type ist std::pair<const int, int> . Wenn Sie dem Schlüsseltyp const hinzufügen, wird const const int einfach auf const int reduziert.

    
sbi 11.08.2009 14:15
quelle
0

Wie Dewfy sagte, spielt es bei dem von Ihnen angegebenen Beispiel keine Rolle, da int ein eingebauter Typ ist und nach Wert kopiert wird, aber mit char * ist es etwas anders ...

Wenn du

hättest %Vor%

Dann können Sie keine Variable einfügen, die als const deklariert ist. char * wird fehlschlagen

%Vor%

mit einem

%Vor%

kann man eigentlich sagen

%Vor%

mit einem

%Vor%

Sie können nur

verwenden %Vor%     
Charles Ma 11.08.2009 12:13
quelle

Tags und Links