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