Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
✐<br />
✐<br />
✐<br />
“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 231 — #269<br />
✐<br />
8.3. Argum<strong>en</strong>tos de funciones y valores de retorno<br />
8.3.1. Paso por valor constante<br />
Puede indicar que los argum<strong>en</strong>tos de funciones son constantes cuando se pasa<br />
por valor como:<br />
void f1(const int i) {<br />
i++; // ilegal<br />
}<br />
pero, ¿qué significa esto Está impidi<strong>en</strong>do que el valor de la variable original<br />
pueda ser cambiado <strong>en</strong> la función f1(). De todos formas, como el argum<strong>en</strong>to se pasa<br />
por valor, es sabido que inmediatam<strong>en</strong>te se hace una copia de la variable original, así<br />
que dicha restricción se cumple implícitam<strong>en</strong>te sin necesidad de usar el especificador<br />
const.<br />
D<strong>en</strong>tro de la función, const si toma un significado: El argum<strong>en</strong>to no se puede<br />
cambiar. Así que, <strong>en</strong> realidad, es una herrami<strong>en</strong>ta para el programador de la función,<br />
no para el que la usa.<br />
Para evitar la confusión del usuario de la función, puede hacer que el argum<strong>en</strong>to<br />
sea constante d<strong>en</strong>tro de la función <strong>en</strong> lugar de <strong>en</strong> la lista de argum<strong>en</strong>tos. Podría<br />
hacerlo con un puntero, pero la sintaxis más adecuada para lograrlo es la refer<strong>en</strong>cia,<br />
algo que se tratará <strong>en</strong> profundidad <strong>en</strong> el capitulo 11[FIXME:XREF].<br />
Brevem<strong>en</strong>te, una refer<strong>en</strong>cia es como un puntero constante que se derefer<strong>en</strong>cia<br />
automáticam<strong>en</strong>te, así que es como t<strong>en</strong>er un alias de la variable. Para crear una refer<strong>en</strong>cia,<br />
debe usar el símbolo & <strong>en</strong> la definición. De ese modo se ti<strong>en</strong>e una definición<br />
libre de confusiones.<br />
void f2(int ic) {<br />
const int &i = ic;<br />
i++; // ilegal (error de ócompilacin)<br />
}<br />
De nuevo, aparece un m<strong>en</strong>saje de error, pero esta vez el especificador const no<br />
forma parte de la cabecera de la función, solo ti<strong>en</strong>e s<strong>en</strong>tido <strong>en</strong> la implem<strong>en</strong>tación de<br />
la función y por la tanto es invisible para el cli<strong>en</strong>te.<br />
8.3.2. Retorno por valor constante<br />
Algo similar ocurre con los valores de retorno. Si dice que el valor de retorno de<br />
una función es constante:<br />
const int g();<br />
está dici<strong>en</strong>do que el valor de la variable original (<strong>en</strong> el ámbito de la función) no<br />
se modificará. Y de nuevo, como lo está devolvi<strong>en</strong>do por valor, es la copia lo que se<br />
retorna, de modo que el valor original nunca se podrá modificar.<br />
En principio, esto puede hacer suponer que el especificador const ti<strong>en</strong>e poco<br />
significado. Puede ver la apar<strong>en</strong>te falta de s<strong>en</strong>tido de devolver constantes por valor<br />
<strong>en</strong> este ejemplo:<br />
//: C08:Constval.cpp<br />
231<br />
✐<br />
✐<br />
✐<br />
✐