Pregunta parámetros de referencia const


¿Hay alguna diferencia entre las siguientes declaraciones?

void somefunc(const Person &p);
void somefunc(Person const &p);

73
2018-06-23 23:31


origen


Respuestas:


Ahi esta ninguna diferencia. const se une al tipo a su izquierda ... a menos que sea la primera parte de la declaración, en cuyo caso se une a la derecha.

Ver: https://isocpp.org/wiki/faq/const-correctness#const-ref-alt

Personalmente, encuentro que const T &x lee mejor De acuerdo a esta, Bjarne también prefiere poner el const primero. Específicamente porque la palabra clave se iba a llamar originalmente readonly y readonly int x lee mejor :-P.


91
2018-06-23 23:34



¡Sí hay! el primero es más legible :)


47
2018-06-23 23:37



Mira esto http://www.parashift.com/c++-faq-lite/const-correctness.html 

(Ver nuevo enlace en su lugar: https://isocpp.org/wiki/faq/const-correctness#const-ref-alt)

Específicamente 18.6 a 18.8.

[18.6]   ¿Qué significa "const Fred & x"?

Significa x alias un objeto Fred, pero x no se puede usar para cambiar ese objeto Fred.

[18.7] ¿Tiene sentido "Fred y const x"?

No, es una tontería.

[18.8] ¿Qué significa "Fred const & x"?

Fred const & x es funcionalmente   equivalente a const Fred & x. Sin embargo,   la verdadera pregunta es cuál debería ser   usado.

Lee el resto del artículo para más información. Pero esencialmente, dice que son equivalentes, y puede usar cualquiera de los dos como mejor le parezca. Sin embargo, debes elegir uno y mantenerte con él, para evitar confusiones futuras.


11
2018-06-23 23:35



Realmente es una cuestión de gusto.

Si se lee de derecha a izquierda, "Person const & x"lee" x es una referencia a una Persona constante ".

Esto suena mejor que "const Person & x", que sería" x es una referencia a una persona, que es constante ".

Entonces, si uno está familiarizado con la dirección de lectura de derecha a izquierda de las declaraciones de variables, quizás uno prefiera el primero.


4
2018-06-24 09:06



Ambos son lo mismo.

const Person & x es actualmente el más popular, porque el inglés pone los adjetivos antes que los sustantivos, y eso lo hace "más parecido al inglés".

La forma alternativa, Person const & x, se sugirió como una forma menos idiomática. Su argumento era que esa forma siempre se puede analizar de derecha a izquierda, "x es una referencia a una persona const". El argumento era que la claridad del análisis era más importante que la estructura idiomática.

Desafortunadamente para esas personas, su forma no maneja todo. Una vez que comienzas a ver matrices y punteros de función y otras formas exóticas, las reglas comienzan a descomponerse. char * str [10] no se puede escribir en forma de derecha a izquierda porque la matriz debe estar en el lado derecho. void (* signal (int, void (* fp) (int))) (int) hace que las personas de derecha a izquierda se encojan de dolor.

Solo ha surgido una regla para dar sentido a todos los tipos, la regla de la espiral a la derecha: http://c-faq.com/decl/spiral.anderson.html

Por lo general, una vez que alguien ve la espiral en el sentido de las agujas del reloj, todas las esperanzas de una regla de análisis claro se apagan. La mayoría de la gente acepta que const Person & x es probablemente la mejor manera de hacerlo.


4
2017-09-01 04:59