3.7.11. Operadores de moldeado

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.