74 votes

Pourquoi certaines personnes préfèrent-elles "T const &" à "const T &"?

Donc, je me rends compte que const T& et T const& sont identiques et les deux signifient une référence à un const T. Dans les deux cas, la référence est également constant (les références ne peut pas être modifiée, à la différence des pointeurs). J'ai observé, dans ma un peu limité de l'expérience, que la plupart des programmeurs C++ utiliser const T&, mais j'ai rencontré quelques personnes qui utilisent T const&. J'utilise const T& tout simplement parce que j'ai appris de cette façon, et ainsi de T const& a l'air un peu drôle pour moi. Quelle est la raison que vous utilisez la variante que vous utilisez? Un travail au sein d'une organisation dont les normes de codage mandat de l'utilisation d'une variante sur l'autre?

Modifier
Sur la base des réponses, il semblerait que l'une des raisons pour le choix entre les deux est de savoir si vous voulez le lire comme le compilateur (de droite à gauche) ou comme l'anglais (de gauche à droite). Si on la lit comme le compilateur, puis "T const&" se lit "& (référence) const (à une constante près) T (de type T)". Si on la lit comme l'anglais, de gauche à droite, puis "const T&" est lu comme "un constant objet de type T dans la forme d'une référence". Je préfère le lire comme de la prose anglaise, mais je peux certainement voir le sens dans l'interprétation de la manière dont le compilateur ne.

Personne n'a répondu à l'organisation ou à des normes de codage question, mais je soupçonne fortement que la plupart des organisations n'ont pas le mandat de l'un sur l'autre, bien qu'ils pourraient rechercher la cohérence.

53voto

UncleBens Points 24580

Je pense que certaines personnes préfèrent simplement lire les déclarations de droite à gauche. const s'applique au jeton de gauche, sauf lorsqu'il n'y a rien et que cela s'applique au jeton de droite. Ainsi, const T& implique la clause "sauf" et peut peut-être être considéré comme plus compliqué (en réalité, les deux doivent être aussi faciles à comprendre).

Comparer:

 const T* p;  (pointer to T that is const)
T const* p;  (pointer to const T) //<- arguable more natural to read
T* const p;  (const pointer to T)
 

31voto

Tomek Points 2742

Ce sera une différence quand vous avez plus d'un const/volatile des modificateurs. Puis à la mettre à gauche du type est encore valide, mais qui va briser la cohérence de l'ensemble declaratiion. Par exemple:

T const * const *p;

signifie que p est un pointeur de pointeur const à const T et vous consistenly lire de droite à gauche.

const T * const *p;

signifie la même chose, mais la consistance est perdu et vous devez vous rappeler que la gauche const/volatile est lié à T seul et de ne pas T *.

7voto

Larry Engholm Points 322

Si vous trouvez cette discussion intéressante, vous auriez probablement trouver cet article par Dan Saks intéressant. Il n'est pas directement répondre à votre question, mais il explique pourquoi il préfère

VP const foo[];

pour

const VP foo[];

C'est parce que compte tenu de

typedef void *VP;

vous pourriez facilement être induit en erreur en pensant que le deuxième exemple ci-dessus signifie

const void *foo[];  // Wrong, actually: void *const foo[];

mais le premier exemple est plus difficile à interpréter.

4voto

Cătălin Pitiș Points 10520

Je pense que c'est une préférence personnelle. Il n'y a pas de différence entre les deux variantes.

3voto

Corey Points 1329

Étant donné que le code est principalement basé sur l'anglais, les programmeurs ont tendance à lire de gauche à droite, donc const T& lit naturellement lorsque le compilateur le lit de droite à gauche, de sorte que T const& lit naturellement ( référence à un const T)

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