Pourquoi utiliser le mot clé const avant et après le nom de la méthode ou de la fonction?
J'ai le code suivant dans mon application. Pourquoi utilisons-nous le mot clé const
avec le type de retour et après le nom de la méthode?
const T& data() const { return data_; }
4 réponses
const T& data() const { return data_; }
^^^^^
Signifie qu'il renverra une référence const
à T
(ici data_
)
Class c;
T& t = c.data() // Not allowed.
const T& tc = c.data() // OK.
const T& data() const { return data_; }
^^^^^
Signifie que la fonction ne modifiera Aucune variable membre de la classe (sauf si le membre est mutable
).
void Class::data() const {
this->data_ = ...; // is not allowed here since data() is const (unless 'data_' is mutable)
this->anything = ... // Not allowed unless the thing is 'mutable'
}
Le qualificatif const
(et volatile
) se lie à la gauche. Cela signifie que chaque fois que vous voyez const
, Il est appliqué au jeton à gauche de celui-ci. Il y a une exception, cependant; s'il n'y a rien à gauche du const
, Il se lie à droite, à la place. Il est important de se souvenir de ces règles.
Dans votre exemple, le premier const
n'a rien à gauche, donc c'est contraignant pour le droit, qui est T
. Cela signifie que le type de retour est une référence à un const T
.
Le second const a quelque chose à gauche de celui-ci; la fonction data()
. Cela signifie que le const
se liera à la fonction, ce qui en fait une fonction const
.
À la fin, nous avons une fonction const renvoyant une référence à une const t.
Le PREMIER const
signifie que la fonction renvoie une référence const T
.
Le second indique que la méthode ne modifie pas l'état de l'objet. C'est-à-dire que la méthode ne change Aucune variable membre.
const T& data() const { return data_; }
Const après la fonction membre indique que les données sont une fonction membre constante et dans cette fonction membre, aucun membre de données n'est modifié.
Le type de retour Const indique le retour d'une constante ref à T