Was ist der Unterschied zwischen
const string& getName() const {return name;}
und
string& getName() const {return name;}
Was bedeutet const am Anfang und am Ende?
Laura
Was ist der Unterschied zwischen
const string& getName() const {return name;}
und
string& getName() const {return name;}
Was bedeutet const am Anfang und am Ende?
Juanchopanza
Das const
am Ende der Funktionssignatur bedeutet, dass die Methode a ist const Member-Funktionalso sind beide Methoden konstante Elementfunktionen.
Das const
am Anfang bedeutet, dass alles, was zurückgegeben wird, konstant ist.
Das erste Beispiel ist eine const-Methode, die eine const-Referenz auf interne Daten zurückgibt und daher const-korrekt ist.
Die zweite ist eine konstante Methode, die einen nicht konstanten Verweis auf interne Daten zurückgibt. Dies ist nicht konstant, da es bedeutet, dass Sie die Daten eines konstanten Objekts ändern könnten.
Ein Aufruf einer const a-Methode kann keine Daten der Instanz ändern (mit Ausnahme von veränderlichen Datenelementen) und kann nur andere const-Methoden aufrufen.
Konstante Methoden können für konstante oder nicht konstante Instanzen aufgerufen werden, aber nicht konstante Methoden können nur für nicht konstante Instanzen aufgerufen werden.
Man gibt a zurück const
Referenz und ist ein const
Mitgliedsfunktion , die andere ist a const
Mitgliedsfunktion.
const string& getName() const {return name;}
die zurückgegeben string
kann nicht geändert werden, und die Methode ist const
(siehe unten).
string& getName() const {return name;}
Die Methode kann keine Nicht-mutable
Klassenmitglieder.
Unabhängig: Da sich die Funktion in keinem Bereich befindet, ist sie keine Member-Funktion, sondern nur eine Funktion, oder? 🙂 (vorausgesetzt, es ist nicht in der Header-Datei)
– Phantasmagorie
7. Mai 2012 um 12:58 Uhr
@phantasmagoria Sie können keine const-Funktion haben, die kein Mitglied ist, also liegt sie definitiv im Klassenbereich.
– Luchian Grigore
7. Mai 2012 um 12:58 Uhr
@phantasmagoria Das war höchstwahrscheinlich eine Zeile, die direkt aus der Klassendeklaration kopiert wurde. Deshalb ist es ein Liner.
– Jo
7. Mai 2012 um 12:59 Uhr
Beide sind konstante Elementfunktionen.
– Juanchopanza
7. Mai 2012 um 13:01 Uhr
@Luchian Grigore ja, das ist richtig, dann wäre “die Klassenmitglieder nicht zu ändern” irrelevant. Vielen Dank!
– Phantasmagorie
7. Mai 2012 um 13:02 Uhr
AlexTheo
const string& getName() const {return name;}
return const reference bedeutet, dass Sie die Instanz nicht mehr zurückgeben können, nachdem Sie die Referenz darauf zurückgegeben haben.
string& getName() const {return name;}
const-Methode bedeutet, dass diese Methode den Zustand des Objekts mit Ausnahme der änderbaren Elementvariablen nicht ändert. Auch diese Methode kann zum Beispiel für ein konstantes Objekt aufgerufen werden:
class MyClass(){
public:
void doSomethingElse()const;
void notConstMethod();
};
void doSomething( const MyClass& obj ){
obj.doSomethingElse();
obj.notConstMethod(); //Error
}
Leute, ich kann die Code-Tags nicht einfügen und habe überhaupt keine Optionen. Was passiert?
– AlexTheo
7. Mai 2012 um 13:04 Uhr
Adarsh Kumar
Wir gebrauchen const
im Präfix der Funktion, um sicherzustellen, dass alles, was von der Funktion zurückgegeben wird, konstant bleibt.
Und wir verwenden const
als Postfix in der Funktionsdeklaration, um sicherzustellen, dass die Funktion keine Änderungen in der aktuellen Instanz der Klasse vornimmt, dh wenn die Member-Funktion der Klasse versucht, den Attributwert des aktuellen Objekts zu ändern, gibt der Compiler einen Fehler aus.
const-Funktion wird hauptsächlich verwendet für const-Objekt um sicherzustellen, dass die Funktion nicht versucht, aktuelle Objektdaten zu ändern.
cprogramming.com/tutorial/const_correctness.html Dies ist ein gutes Tutorial zur Verwendung von const
– Lucian
7. Mai 2012 um 12:56 Uhr
mögliches Duplikat von Bedeutung von “const” zuletzt in einer C++-Methodendeklaration?
– Juanchopanza
7. Mai 2012 um 13:05 Uhr
mögliches Duplikat von Wie viele und welche Verwendungen von “const” in C++?
– dmckee — Ex-Moderator-Kätzchen
7. Mai 2012 um 16:55 Uhr