À la lumière de la réponse acceptée soulignant que le retour d'une référence non-const à un membre à partir d'une méthode d'instance const ne sera pas compilé (sans un cast ou en rendant la variable membre mutable), la question est devenue plus une discussion générale sur les meilleures pratiques concernant les méthodes d'instance const.
Pour la postérité, voici la question initiale :
Si j'ai un objet avec un getter qui renvoie une référence non-const, par exemple :
SomeObject& SomeOtherObject::foo(){
return someObjectInstance;
}
Faut-il le rendre obligatoire ? Il est évident que l'appel lui-même ne modifie pas l'objet, mais l'appelant pourrait alors modifier someObjectInstance, ce qui modifierait mon instance de SomeOtherObject.
Je pense que ma question se résume en fait à " Que signifie exactement l'expression "const" dans une méthode membre ? " Est-ce que A) l'appel lui-même ne mute pas l'objet ou B) aucune mutation de l'objet ne peut se produire pendant l'appel, ou comme résultat des références/pointeurs renvoyés (avec une mise en garde pour les personnes qui font des const_casts).
Par ailleurs, je suis en train de l'ajouter là où j'ai besoin d'appels constants.
const SomeObject& SomeOtherObject::constFoo() const{
return someObjectInstance;
}
pour plus de sécurité, car je suis réticent à l'idée de faire
SomeObject& SomeOtherObject::foo() const{
return someObjectInstance;
}
même si cela me faciliterait la vie à certains endroits.