Heim >Backend-Entwicklung >C++ >Warum führt die Übergabe eines Const-Objekts an eine Nicht-Const-Mitgliedsfunktion zu einem Qualifier-Disqualifikationsfehler in C?

Warum führt die Übergabe eines Const-Objekts an eine Nicht-Const-Mitgliedsfunktion zu einem Qualifier-Disqualifikationsfehler in C?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-08 04:27:09875Durchsuche

Why Does Passing a Const Object to a Non-Const Member Function Cause a Qualifier Disqualification Error in C  ?

Übergabe von Const-Objekten als „dieses“ Argument: Qualifier-Disqualifikationsfehler

Übergabe von Const-Objekten als „diese“-Argumente an Mitgliedsfunktionen in C kann dazu führen, dass bei der Übergabe von „const xxx“ als „dieses“ Argument der Mitgliedsfunktion Qualifikationsmerkmale verworfen werden. Dies geschieht, weil der Compiler die Möglichkeit in Betracht zieht, dass nicht konstante Memberfunktionen das Objekt ändern können, was für konstante Objekte verboten ist.

Problemanalyse

Im bereitgestellten Code , werden die Objekte in der Menge als const StudentT gespeichert. Beim Zugriff auf die Memberfunktionen getId() und getName() innerhalb der Schleife erkennt der Compiler dieses Problem, da die Objekte const sind und die Memberfunktionen nicht als const markiert sind.

Lösung

Um den Fehler zu beheben, müssen die Funktionen getId() und getName() auf const gesetzt werden:

int getId() const {
    return id;
}

string getName() const {
    return name;
}

Dadurch können die Funktionen für konstante Objekte aufgerufen werden, ohne die konstante Regeln zu verletzen.

Zusätzliche Hinweise

  • In ähnlicher Weise kann der Operator< Funktion sollte als konstante Referenz implementiert werden:
inline bool operator< (const StudentT &amp; s1, const StudentT &amp; s2) {
    return s1.getId() < s2.getId();
}
  • Die Übergabe von Referenzen (anstelle von Objekten) an Mitgliedsfunktionen ist aus Gründen der Leistung und Codekorrektheit vorzuziehen.

Das obige ist der detaillierte Inhalt vonWarum führt die Übergabe eines Const-Objekts an eine Nicht-Const-Mitgliedsfunktion zu einem Qualifier-Disqualifikationsfehler in C?. 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