C++ const dans les getter
Je suis encore à apprendre le C++ et je suis en train de lire partout que je dois utiliser const
partout où je le peux (pour la vitesse de raison je pense).
J'ai l'habitude d'écrire ma méthode de lecture comme ceci:
const bool isReady() {
return ready;
}
Mais j'ai vu que certains IDE de générer automatiquement de lecture de cette manière:
bool getReady() const {
return ready;
}
Mais, écrit délégués, il m'est arrivé de trouver cette erreur si la const
est après la fonction:
member function 'isReady' not viable: 'this' argument has type 'const VideoReader', but function is not marked const
De sorte que, quelle est la meilleure méthode pour écrire un const getter? Dois-je vraiment s'en inquiéter?
En référence à des valeurs booléennes cette question semble un peu ridicule. J'ai trouvé une bonne explication de const à cette question: stackoverflow.com/questions/5503352/const-before-or-const-after
OriginalL'auteur nkint | 2014-01-31
Vous devez vous connecter pour publier un commentaire.
Il y a une énorme différence entre les deux façons.
Le code ci-dessus sera de retour d'une
const bool
, mais il ne garantit pas que l'objet ne va pas changer son état logique.Cela renvoie un
bool
, et il garantit que la logique de l'état de votre objet ne changera pas. Dans ce cas, il n'est pas nécessaire d'écrireconst
devant le type de retour. Il ne fait aucun sens pour retourner unconst bool
parce que c'est une copie de toute façon. De sorte qu'ilconst
est inutile. La deuxièmeconst
est nécessaire pourconst
de l'exactitude, ce qui n'est pas utilisé pour des raisons de vitesse mais pour rendre votre programme plus fiable et sûr.E. g. Effective C++ par Scott Meyers ou Exceptionnelles en C++ par Herb Sutter. Voici l'ancien gotw.ca/gotw/006.htm et pour le C++11, c'est même a pris de l'importance. herbsutter.com/2013/05/24/gotw-6a-const-correctness-part-1-3
Je ne pense pas que c'est la meilleure réponse en terme d'explication du problème, mais les liens sont très bon!
OriginalL'auteur mkaes
Ils signifient deux différentes choses:
Cela renvoie une constante booléenne. Sens un booléen qui ne peut pas changer de valeur dans le temps, il a été créé.
C'est une fonction constante, ce qui signifie une fonction qui ne modifient pas les variables membres de la classe à laquelle il appartient. C'est le style recommandé d'utiliser pour les méthodes de lecture, puisque leur seul but est de récupérer les données, et ne devrait pas modifier quoi que ce soit dans le processus.
OriginalL'auteur Diana
const
méthode informe le compilateur que vous ne pourrez pas modifier la classe de l'instance sur laquelle cette méthode est appelée:donc, si vous essayez de modifier votre objet à l'intérieur de getReady() puis compilateur émet erreur. Const méthodes sont utiles lorsque vous avez ie.: const A&, ou Un const*, vous pouvez appeler que des méthodes const sur de tels objets.
:
ce const fournit effectivement pas de réel avantage, car bool est copié tout isReady() retourne. Ces
const
devait avoir un sens si retourné type était unconst char*
ouconst A&
, dans de tels casconst
rend votre chaîne de char ou d'Une instance de classe immuable.OriginalL'auteur marcinj
Il y a une différence entre l'utilisation de la
const
mot-clé pour le type de retour ou pour la signature de la méthode. Dans le premier cas, la valeur retournée sera une valeur constante. Dans le second cas, la méthode sera appelée constante méthode, qui ne peut pas changer la représentation de l'objet. Sur les objets constants, seule la constante de méthodes sont disponibles.OriginalL'auteur mcserep
Const getter a la signature
L'autre version n'est pas une
const
méthode, elle retourne unconst
valeur (qui est fondamentalement inutile).Avoir un
const
de lecture vous permet d'appeler const objets:Cela n'est valable que si
getReady
est marqué commeconst
.OriginalL'auteur Luchian Grigore