La palabra molde(cast) se usa en el sentido
de "colocar dentro de un molde". El compilador cambiará
automáticamente un tipo de dato a otro si tiene sentido. De
hecho, si se asigna un valor entero a una variable de punto
flotante, el compilador llamará secretamente a una función (o
más probablemente, insertará código) para convertir el
int
a un float
. El molde permite
hacer este tipo de conversión explicita, o forzarla cuando
normalmente no pasaría.
Para realizar un molde, se debe situar el tipo deseado (incluyendo todos los modificadores) dentro de paréntesis a la izquierda del valor. Este valor puede ser una variable, una constante, el valor producido por una expresión, o el valor devulto por una función. A continuación, un ejemplo:
//: C03:SimpleCast.cpp int main() { int b = 200; unsigned long a = (unsigned long int)b; } ///:~
Listado 3.37. C03/SimpleCast.cpp
El moldeado es poderoso, pero puede causar dolores de cabeza porque en algunas situaciones fuerza al compilador a tratar datos como si fuesen (por ejemplo) más largos de lo que realmente son, de modo que ocupará más espacio en memoria; lo que puede afectar a otros datos. Esto ocurre a menudo cuando se moldean punteros, no cuando se hacen moldes simples como los que ha visto anteriormente.
C++ tiene una sintaxis adicional para moldes, que sigue a la sintaxis de llamada a funciones. Esta sintaxis pone los paréntesis alrededor del argumento, como en una llamada a función, en lugar de a los lados del tipo:
//: C03:FunctionCallCast.cpp int main() { float a = float(200); // This is equivalent to: float b = (float)200; } ///:~
Listado 3.38. C03/FunctionCallCast.cpp
Por supuesto, en el caso anterior, en realidad no se necesitaría
un molde; simplemente se puede decir 200.f
o 200.0f
(en efecto, eso es típicamente lo
que el compilador hará para la expresión anterior). Los moldes
normalmente se utilizan con variables, en lugar de con constantes.