13.01.2015 Views

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

Pensar en C++ (Volumen 1) - Grupo ARCO

SHOW MORE
SHOW LESS

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 />

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!