Heim >Backend-Entwicklung >C++ >Warum verursachen Nicht-Const-Memberfunktionen Fehler, wenn sie mit Const-Objekten in einem „std::set' verwendet werden?

Warum verursachen Nicht-Const-Memberfunktionen Fehler, wenn sie mit Const-Objekten in einem „std::set' verwendet werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-15 12:56:30747Durchsuche

Why Do Non-Const Member Functions Cause Errors When Used with Const Objects in a `std::set`?

Fehler beim Übergeben von Nicht-Const-Mitgliedsfunktionen an Const-Objekte

Im bereitgestellten Code wird ein std::set zum Speichern von StudentT verwendet Objekte. Das Problem tritt auf, wenn versucht wird, die Memberfunktionen getId() und getName() für Objekte innerhalb der Menge aufzurufen. Diese Mitgliedsfunktionen sind nicht als const gekennzeichnet, was bedeutet, dass sie die Daten des Objekts ändern können. Die Objekte im std::set werden jedoch als const StudentT gespeichert, wodurch jegliche Änderungen verhindert werden.

Der Compiler erkennt diese Inkonsistenz und generiert die folgenden Fehlermeldungen:

../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'int StudentT::getId()' discards qualifiers
../main.cpp:35: error: passing 'const StudentT' as 'this' argument of 'std::string StudentT::getName()' discards qualifiers

Dieser Fehler weist darauf hin dass der Compiler versucht, ein const-Objekt als this-Argument an Nicht-const-Memberfunktionen zu übergeben, was der Fall ist verboten.

Lösung:

Um dieses Problem zu beheben, ändern Sie die Memberfunktionen getId() und getName() so, dass sie wie folgt konstant sind:

int getId() const {
    return id;
}

string getName() const {
    return name;
}

Indem Sie diese Funktionen als const markieren, stellen Sie sicher, dass sie die Daten des Objekts nicht ändern und sicher auf const aufgerufen werden können Objekte.

Zusätzlich wird empfohlen, das < Operator-Vergleichsfunktion const, indem const-Referenzen auf ihre Parameter übergeben werden:

inline bool operator< (const StudentT &s1, const StudentT &s2) {
    return s1.getId() < s2.getId();
}

Diese Änderungen verhindern unerwartete Fehler und stellen sicher, dass der Code korrekt funktioniert.

Das obige ist der detaillierte Inhalt vonWarum verursachen Nicht-Const-Memberfunktionen Fehler, wenn sie mit Const-Objekten in einem „std::set' verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn