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 105 — #143<br />
✐<br />
3.7. Los operadores y su uso<br />
static_cast<br />
const_cast<br />
reinterpret_cast<br />
dynamic_cast<br />
Para moldes que se comportan bi<strong>en</strong> o<br />
razonablem<strong>en</strong>te bi<strong>en</strong>, incluy<strong>en</strong>do cosas<br />
que se podrían hacer sin un molde<br />
(como una conversión automática de<br />
tipo).<br />
Para moldear const y/o volatile<br />
Para moldear a un significado<br />
completam<strong>en</strong>te difer<strong>en</strong>te. La clave es<br />
que se necesitará volver a moldear al<br />
tipo original para poderlo usar con<br />
seguridad. El tipo al que moldee se<br />
usa típicam<strong>en</strong>te sólo para jugar un<br />
poco o algún otro propósito<br />
misterioso. Éste es el más peligroso<br />
de todos los moldes.<br />
Para realizar un downcasting seguro<br />
(este molde se describe <strong>en</strong> el Capítulo<br />
15).<br />
Cuadro 3.2: Moldes explícitos de <strong>C++</strong><br />
más <strong>en</strong> el Capítulo 15.<br />
static_cast<br />
El static_cast se utiliza para todas las conversiones que están bi<strong>en</strong> definidas.<br />
Esto incluye conversiones «seguras» que el compilador permitiría sin utilizar<br />
un molde, y conversiones m<strong>en</strong>os seguras que están sin embargo bi<strong>en</strong> definidas. Los<br />
tipos de conversiones que cubre static_cast incluy<strong>en</strong> las conversiones típicas sin<br />
molde, conversiones de estrechami<strong>en</strong>to (pérdida de información), forzar una conversión<br />
de un void*, conversiones de tipo implícitas, y navegación estática de jerarquías<br />
de clases (ya que no se han visto aún clases ni her<strong>en</strong>cias, este último apartado se<br />
pospone hasta el Capítulo 15):<br />
//: C03:static_cast.cpp<br />
void func(int) {}<br />
int main() {<br />
int i = 0x7fff; // Max pos value = 32767<br />
long l;<br />
float f;<br />
// (1) Typical castless conversions:<br />
l = i;<br />
f = i;<br />
// Also works:<br />
l = static_cast(i);<br />
f = static_cast(i);<br />
// (2) Narrowing conversions:<br />
i = l; // May lose digits<br />
i = f; // May lose info<br />
// Says "I know," eliminates warnings:<br />
i = static_cast(l);<br />
i = static_cast(f);<br />
char c = static_cast(i);<br />
105<br />
✐<br />
✐<br />
✐<br />
✐