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 104 — #142<br />

✐<br />

Capítulo 3. C <strong>en</strong> <strong>C++</strong><br />

unsigned long a = (unsigned long int)b;<br />

} ///:~<br />

El moldeado es poderoso, pero puede causar dolores de cabeza porque <strong>en</strong> algunas<br />

situaciones fuerza al compilador a tratar datos como si fues<strong>en</strong> (por ejemplo) más<br />

largos de lo que realm<strong>en</strong>te son, de modo que ocupará más espacio <strong>en</strong> memoria; lo<br />

que puede afectar a otros datos. Esto ocurre a m<strong>en</strong>udo cuando se moldean punteros,<br />

no cuando se hac<strong>en</strong> moldes simples como los que ha visto anteriorm<strong>en</strong>te.<br />

<strong>C++</strong> ti<strong>en</strong>e una sintaxis adicional para moldes, que sigue a la sintaxis de llamada<br />

a funciones. Esta sintaxis pone los paréntesis alrededor del argum<strong>en</strong>to, como <strong>en</strong> una<br />

llamada a función, <strong>en</strong> lugar de a los lados del tipo:<br />

//: C03:FunctionCallCast.cpp<br />

int main() {<br />

float a = float(200);<br />

// This is equival<strong>en</strong>t to:<br />

float b = (float)200;<br />

} ///:~<br />

Por supuesto, <strong>en</strong> el caso anterior, <strong>en</strong> realidad no se necesitaría un molde; simplem<strong>en</strong>te<br />

se puede decir 200.f o 200.0f (<strong>en</strong> efecto, eso es típicam<strong>en</strong>te lo que el<br />

compilador hará para la expresión anterior). Los moldes normalm<strong>en</strong>te se utilizan<br />

con variables, <strong>en</strong> lugar de con constantes.<br />

3.7.12. Los moldes explícitos de <strong>C++</strong><br />

Los moldes se deb<strong>en</strong> utilizar con cuidado, porque lo que está haci<strong>en</strong>do <strong>en</strong> realidad<br />

es decir al compilador «Olvida la comprobación de tipo - trátalo como si fuese<br />

de este otro tipo.» Esto significa, que está introduci<strong>en</strong>do un agujero <strong>en</strong> el sistema de<br />

tipos de <strong>C++</strong> y evitando que el compilador informe de que está haci<strong>en</strong>do algo erróneo<br />

con un tipo. Lo que es peor, el compilador lo cree implícitam<strong>en</strong>te y no realiza<br />

ninguna otra comprobación para buscar errores. Una vez ha com<strong>en</strong>zado a moldear,<br />

está expuesto a todo tipo de problemas. De hecho, cualquier programa que utilice<br />

muchos moldes se debe revisar con det<strong>en</strong>imi<strong>en</strong>to, no importa cuanto haya dado por<br />

s<strong>en</strong>tado que simplem<strong>en</strong>te «debe» hacerse de esta manera. En g<strong>en</strong>eral, los moldes<br />

deb<strong>en</strong> ser pocos y aislados para solucionar problemas específicos.<br />

Una vez se ha <strong>en</strong>t<strong>en</strong>dido esto y se pres<strong>en</strong>te un programa con errores, la primera<br />

impresión puede que sea mirar los moldes como si fues<strong>en</strong> los culpables. Pero, ¿cómo<br />

<strong>en</strong>contrar los moldes estilo C Son simplem<strong>en</strong>te nombres de tipos <strong>en</strong>tre paréntesis,<br />

y si se empieza a buscar estas cosas descubrirá que a m<strong>en</strong>udo es difícil distinguirlos<br />

del resto del código.<br />

El <strong>C++</strong> Estándar incluye una sintaxis explícita de molde que se puede utilizar<br />

para reemplazar completam<strong>en</strong>te los moldes del estilo antiguo de C (por supuesto, los<br />

moldes de estilo C no se pued<strong>en</strong> prohibir sin romper el código, pero los escritores de<br />

compiladores pued<strong>en</strong> advertir fácilm<strong>en</strong>te acerca de los moldes antiguos). La sintaxis<br />

explícita de moldes está p<strong>en</strong>sada para que sea fácil <strong>en</strong>contrarlos, tal como se puede<br />

observar por sus nombres:<br />

Los primeros tres moldes explícitos se describirán completam<strong>en</strong>te <strong>en</strong> las sigui<strong>en</strong>tes<br />

secciones, mi<strong>en</strong>tras que los últimos se explicarán después de que haya apr<strong>en</strong>dido<br />

104<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!