169 votes

C ++: référence const, avant vs après le spécificateur de type

Quelle est la différence entre les arguments dans:

 int foo1(const Fred &arg) {
...
}
 

et

 int foo2(Fred const &arg) {
...
}
 

? Je ne vois pas ce cas couvert dans la FAQ de parashift.

138voto

jamesdlin Points 13455

Il n'y a pas de différence sémantique entre const T& et T const&; la langue traite comme du même type.

À l'égard de laquelle vous devriez préférer un point de vue stylistique, cependant, je vais être en désaccord avec beaucoup d'autres réponses et préfèrent const T& (et const T*):

  • C'est le style utilisé dans de Stroustrup Le Langage de Programmation C++ livre.
  • C'est le style utilisé dans la norme C++.
  • const T* empiriquement semble la façon la plus commune pour moi que T const* dans l'ensemble de la C code que j'ai vu. (C'est le style K&R est Le Langage de Programmation C et le style utilisé dans le C standard.)
  • En raison des facteurs ci-dessus, je pense que const T& a beaucoup plus d'inertie que T const&, et je pense que la suite de pratiques communes est plus lisible que dogmatiquement adhérant à droite à gauche règles d'analyse.
  • Avec T const*, il semble plus facile de misenter comme T* const (surtout si les gens ne sont pas habitués à cela).

Sur l'ensemble de droite à gauche de l'analyse syntaxique de l'argument que les gens semblent aimer à utiliser: comme je l'ai mentionné dans un commentaire à une autre réponse, const T& lit à droite à gauche. C'est une référence à un T constante. "T" et "constant" chacun peut travailler comme un adjectif ou un nom. (En outre, la lecture, T const* droite à gauche peut être ambigu et pourrait conduire à une interprétation erronée comme "pointeur constant pour T".)

137voto

Sean Fausett Points 1702

Pas de différence en tant que const est lire de droite à gauche à l'égard de l' &, de sorte que les deux représentent une référence de immuable Fred instance.

Fred& const signifierait la référence elle-même est immuable, ce qui est redondant; lorsque vous traitez avec des pointeurs const deux Fred const* et Fred* const sont valables, mais différent.

C'est une question de style, mais je préfère utiliser const comme un suffixe, car il peut être appliqué de façon uniforme y compris les fonctions membres const.

13voto

Chubsdad Points 14310

S'ils ne font qu'un, pour conserver la cohérence avec la règle RIGHT-LEFT concernant l'analyse des déclarations C et C ++, il est préférable d'écrire Fred const &arg

Reportez-vous également à cela pour mieux comprendre les déclarations, les qualificateurs et les déclarateurs.

5voto

Prasoon Saurav Points 47488

3voto

Nirocfz Points 21

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X