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 103 — #141<br />

✐<br />

3.7. Los operadores y su uso<br />

En g<strong>en</strong>eral, es mejor evitar el uso de la coma para cualquier otra cosa que no sea<br />

separar, ya que la g<strong>en</strong>te no está acostumbrada a verla como un operador.<br />

3.7.10. Trampas habituales cuando se usan operadores<br />

Como se ha ilustrado anteriorm<strong>en</strong>te, una de las trampas al usar operadores es<br />

tratar de trabajar sin paréntesis incluso cuando no se está seguro de la forma <strong>en</strong> la<br />

que se va a evaluar la expresión (consulte su propio manual de C para comprobar el<br />

ord<strong>en</strong> de la evaluación de las expresiones).<br />

Otro error extremadam<strong>en</strong>te común se ve a continuación:<br />

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

// Operator mistakes<br />

int main() {<br />

int a = 1, b = 1;<br />

while(a = b) {<br />

// ....<br />

}<br />

} ///:~<br />

La s<strong>en</strong>t<strong>en</strong>cia a = b siempre se va a evaluar como cierta cuando b es distinta de<br />

cero. La variable a obti<strong>en</strong>e el valor de b, y el valor de b también es producido por<br />

el operador =. En g<strong>en</strong>eral, lo que se pret<strong>en</strong>de es utilizar el operador de equival<strong>en</strong>cia<br />

(== d<strong>en</strong>tro de una s<strong>en</strong>t<strong>en</strong>cia condicional, no la asignación. Esto le ocurre a muchos<br />

programadores (de todos modos, algunos compiladores adviert<strong>en</strong> del problema, lo<br />

cual es una ayuda).<br />

Un problema similar es usar los operadores and y or de bits <strong>en</strong> lugar de sus equival<strong>en</strong>tes<br />

lógicos. Los operadores and y or de bits usan uno de los caracteres (& o |),<br />

mi<strong>en</strong>tras que los operadores lógicos utilizan dos (&& y ||). Al igual que con = y ==,<br />

es fácil escribir simplem<strong>en</strong>te un carácter <strong>en</strong> vez de dos. Una forma muy fácil de recordarlo<br />

es que «los bits son mas pequeños, de modo que no necesitan tantos caracteres<br />

<strong>en</strong> sus operadores».<br />

3.7.11. Operadores de moldeado<br />

La palabra molde(cast) se usa <strong>en</strong> el s<strong>en</strong>tido de "colocar d<strong>en</strong>tro de un molde". El<br />

compilador cambiará automáticam<strong>en</strong>te un tipo de dato a otro si ti<strong>en</strong>e s<strong>en</strong>tido. De<br />

hecho, si se asigna un valor <strong>en</strong>tero a una variable de punto flotante, el compilador<br />

llamará secretam<strong>en</strong>te a una función (o más probablem<strong>en</strong>te, insertará código) para<br />

convertir el int a un float. El molde permite hacer este tipo de conversión explicita, o<br />

forzarla cuando normalm<strong>en</strong>te no pasaría.<br />

Para realizar un molde, se debe situar el tipo deseado (incluy<strong>en</strong>do todos los modificadores)<br />

d<strong>en</strong>tro de paréntesis a la izquierda del valor. Este valor puede ser una<br />

variable, una constante, el valor producido por una expresión, o el valor devulto por<br />

una función. A continuación, un ejemplo:<br />

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

int main() {<br />

int b = 200;<br />

103<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!