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_; }
41
c++
demandé sur streppel 2013-05-09 00:46:51

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'
}
77
répondu stardust 2017-03-07 10:07:16

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.

15
répondu Collin Dauphinee 2013-05-08 20:51:52

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.

4
répondu Ed Heal 2013-05-08 20:49:46
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

3
répondu shivakumar 2013-05-08 20:48:44