Typ& MeineKlasse::meineKleineMethode () als const?

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
Ginsengelf
Beiträge: 79
Registriert: 2. Mai 2007 10:21

Typ& MeineKlasse::meineKleineMethode () als const?

Beitrag von Ginsengelf » 28. Januar 2009 17:13

Moin, eine Stil(?)frage:

wenn man eine Methode wie die folgende hat:

Code: Alles auswählen

Typ& MeineKlasse::meineKleineMethode ()
{
    return m_var; // mit m_var als Membervariable von MeineKlasse
}
deklariert ihr die Methode als "const"?
also

Code: Alles auswählen

Typ& MeineKlasse::meineKleineMethode () [b]const[/b]
Ich bin gerade etwas gespalten, weil auf der einen Seite die Methode selbst ja nicht an der Klasse herumspielt, andererseits über die zurückgegebene Referenz die Membervariable geändert werden kann (und auch geändert wird) (und ja, normalerweise wäre die Referenz const, aber das geht in meinem speziellen Fall leider nicht...)

Bitte um Meinungen.

Ginsengelf

RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag von RHBaum » 28. Januar 2009 17:48

eigentlich ziemlich simpel ....

Gibst du eine Kopie raus -> mach das ding const
T getvalue() const;

Gibst du ne Refernz raus, schreib 2 getter fuer ne mormale und ne const Variante

T & getvalue();
const T & getvalue() const;

Macht ne konstante ref keinen sinn ... lass die const variante weg

Alles andere ist aushebeln des const mechanismus .... und sollte vermieden werden.
und ja, normalerweise wäre die Referenz const, aber das geht in meinem speziellen Fall leider nicht..
Das klingt nach nem zwielichtigen design ... du brauchst ne veraenderliche Referenz auf ne interne variable von ner Instanz die eigentlich const ist ???

Es gibt aber immer wieder faelle, wo ein logisches Konstant sich mit dem technischen beissen. Beispiel Mutexe zum locken.
Auch beim lesen sollt man locken, aber der mutex darf ned konstant sein dazu ...
Oder auch Caches, die beim eigentlichen Lesen doch daten veraendern.
dort hilft dir dann mutable weiter.

Ciao ...

Antworten