„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Warum führt die Übergabe eines Const-Objekts an eine Nicht-Const-Mitgliedsfunktion in C++ zu einem Qualifier-Disqualifikationsfehler?

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

Veröffentlicht am 14.01.2025
Durchsuche:435

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

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

Übergabe von Const-Objekten als „this“-Argumente an Memberfunktionen 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önnten, 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.

Solution

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

int getId() const {
    return id;
}

string getName() const {
    return name;
}

Dadurch können die Funktionen auf const-Objekten aufgerufen werden, ohne die const-Regeln zu verletzen.

Zusätzliche Hinweise

  • Ähnlich auch der Operator
inline bool operator
  • Die Übergabe von Referenzen (anstelle von Objekten) an Mitgliedsfunktionen ist aus Gründen der Leistung und Codekorrektheit vorzuziehen.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3