2 Stimmen

C++: Pass-by-Reference und das Schlüsselwort const

Ich habe eine Frage bezüglich der Übergabe einer Karte per Referenz. Betrachten wir das folgende Stück Code:

void doNotChangeParams(const map<int, int>& aMap){

    if (aMap.find(0) != aMap.end()){
        cout << "map[0] = " << aMap[0] << endl;
    }
}

und ich habe eine Karte myMap und machen Sie einen Anruf wie diesen: doNotChangeParams(myMap)

Wie man sieht, ändere ich den Parameter nicht aMap innerhalb der Funktion. Dennoch beschwert sich mein G++-Compiler, dass der Zugriff aMap[0] verwirft den Qualifier const .

Ich setze const da ich den Lesern dieser Funktion mitteilen möchte, dass ich das Argument nicht ändere. Außerdem hilft es, Kompilierfehler zu vermeiden, wenn ich die Karte versehentlich ändere.

Derzeit muss ich die const und ich denke, es würde die obige Bedeutung der Signatur der Methode für den Leser unklar machen. Ich weiß, dass ein Kommentar ausreichen würde, aber ich dachte, ich würde einfach fragen, falls Sie irgendwelche "programmatischen" Möglichkeiten kennen.

Danke, Leute.

4voto

Fred Larson Punkte 58721

Le site [] Betreiber von std::map ist nicht konstant. Das liegt daran, dass der Schlüssel mit einem Standardwert hinzugefügt wird, wenn der Schlüssel nicht gefunden wird. Sie können ihn also nicht für eine const map-Referenz verwenden. Verwenden Sie den Iterator, der von find stattdessen:

typedef map<int, int> MyMapType;

void doNotChangeParams(const MyMapType& aMap){
    MyMapType::const_iterator result = aMap.find(0);
    if (result != aMap.end()){
        cout << "map[0] = " << result->second << endl;
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X