Seite 1 von 1

Typ& MeineKlasse::meineKleineMethode () als const?

Verfasst: 28. Januar 2009 16:13
von Ginsengelf
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

Verfasst: 28. Januar 2009 16:48
von RHBaum
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 ...