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 229 — #267<br />
✐<br />
8.2. Punteros<br />
*w = 2;<br />
También puede hacer un puntero constante a un elem<strong>en</strong>to constante usando una<br />
de las formas sigui<strong>en</strong>tes:<br />
int d = 1;<br />
const int* const x = &d; // (1)<br />
int const* const x2 = &d; // (2)<br />
Ahora ni el puntero ni el elem<strong>en</strong>to al que apunta pued<strong>en</strong> modificarse.<br />
Algunos argum<strong>en</strong>tan que la segunda forma es más consist<strong>en</strong>te porque el const<br />
se coloca siempre a la derecha de lo que afecta. Debe decidir que forma resulta más<br />
clara para su estilo de codificación particular.<br />
Algunas líneas de un archivo susceptible de ser compilado.<br />
//: C08:ConstPointers.cpp<br />
const int* u;<br />
int const* v;<br />
int d = 1;<br />
int* const w = &d;<br />
const int* const x = &d; // (1)<br />
int const* const x2 = &d; // (2)<br />
int main() {} ///:~<br />
Formato<br />
Este libro sigue la norma de poner sólo una definición de puntero por línea, e<br />
inicializar cada puntero <strong>en</strong> el punto de definición siempre que sea posible. Por eso,<br />
el estilo es colocar el * al lado del tipo:<br />
int* u = &i;<br />
como si int* fuese un tipo de dato básico. Esto hace que el código sea más fácil de<br />
leer, pero desafortunadam<strong>en</strong>te, esta no es la forma <strong>en</strong> que funciona. El «*» se refiere<br />
al id<strong>en</strong>tificador no al tipo. Se puede colocar <strong>en</strong> cualquier sitio <strong>en</strong>tre el nombre del<br />
tipo y el id<strong>en</strong>tificador. De modo que puede hacer esto:<br />
int * u = &i, v = 0;<br />
donde se crea un int* u y después un int v (que no es puntero). Como esto<br />
puede parecer confuso a los lectores, es mejor utilizar el estilo mostrado <strong>en</strong> este libro.<br />
8.2.3. Asignación y comprobación de tipos<br />
<strong>C++</strong> es muy exig<strong>en</strong>te <strong>en</strong> lo refer<strong>en</strong>te a la comprobación de tipos y esto se exti<strong>en</strong>de<br />
a la asignación de punteros. Puede asignar la dirección de una variable no constante<br />
a un puntero constante porque simplem<strong>en</strong>te está prometi<strong>en</strong>do no cambiar algo<br />
que puede cambiarse. De todos modos, no puede asignar la dirección de una variable<br />
constante a un puntero no constante porque <strong>en</strong>tonces está dici<strong>en</strong>do que podría<br />
229<br />
✐<br />
✐<br />
✐<br />
✐