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 95 — #133<br />

✐<br />

3.7. Los operadores y su uso<br />

contrario, el número será un double.<br />

Las constantes de tipo char son caracteres <strong>en</strong>tre comillas simples, tales como: ’-<br />

A’, ’o’, ’’. Fíjese <strong>en</strong> que hay una gran difer<strong>en</strong>cia <strong>en</strong>tre el carácter ’o’ (ASCII 96)<br />

y el valor 0. Los caracteres especiales se repres<strong>en</strong>tan con la «barra invertida»: ’\n’<br />

(nueva línea), ’\t’ (tabulación), ’\\’ (barra invertida), ’\r’ (retorno de carro), ’-<br />

\"’ (comilla doble), ’\’’ (comilla simple), etc. Incluso se puede expresar constantes<br />

de tipo char <strong>en</strong> octal: ’\17’ o hexadecimal: ’\xff’.<br />

3.6.6. Volatile<br />

Mi<strong>en</strong>tras que el calificador const indica al compilador «Esto nunca cambia» (lo<br />

que permite al compilador realizar optimizaciones extra), el calificador volatile<br />

dice al compilador «Nunca se sabe cuando cambiará esto», y evita que el compilador<br />

realice optimizaciones basadas <strong>en</strong> la estabilidad de esa variable. Se utiliza esta<br />

palabra reservada cuando se lee algún valor fuera del control del código, algo así<br />

como un registro <strong>en</strong> un hardware de comunicación. Una variable volatile se lee<br />

siempre que su valor es requerido, incluso si se ha leído <strong>en</strong> la línea anterior.<br />

Un caso especial de espacio que está «fuera del control del código» es <strong>en</strong> un programa<br />

multi-hilo. Si está comprobando una bandera particular que puede ser modificada<br />

por otro hilo o proceso, esta bandera debería ser volatile de modo que el<br />

compilador no asuma que puede optimizar múltiples lecturas de la bandera.<br />

Fíjese <strong>en</strong> que volatile puede no t<strong>en</strong>er efecto cuando el compilador no está<br />

optimizando, pero puede prev<strong>en</strong>ir errores críticos cuando se comi<strong>en</strong>za a optimizar<br />

el código (que es cuando el compilador empezará a buscar lecturas redundantes).<br />

Las palabras reservadas const y volatile se verán con más detalle <strong>en</strong> un capítulo<br />

posterior.<br />

3.7. Los operadores y su uso<br />

Esta sección cubre todos los operadores de C y <strong>C++</strong>.<br />

Todos los operadores produc<strong>en</strong> un valor a partir de sus operandos. Esta operación<br />

se efectúa sin modificar los operandos, excepto con los operadores de asignación,<br />

increm<strong>en</strong>to y decrem<strong>en</strong>to. El hecho de modificar un operando se d<strong>en</strong>omina<br />

efecto colateral. El uso más común de los operadores que modifican sus operandos es<br />

producir el efecto colateral, pero se debería t<strong>en</strong>er <strong>en</strong> cu<strong>en</strong>ta que el valor producido<br />

está disponible para su uso al igual que el de los operadores sin efectos colaterales.<br />

3.7.1. Asignación<br />

La asignación se realiza mediante el operador =. Eso significa «Toma el valor<br />

de la derecha (a m<strong>en</strong>udo llamado rvalue) y cópialo <strong>en</strong> la variable de la izquierda<br />

(a m<strong>en</strong>udo llamado lvalue).» Un rvalue es cualquier constante, variable o expresión<br />

que pueda producir un valor, pero un lvalue debe ser una variable con un nombre<br />

distintivo y único (esto quiere decir que debe haber un espacio físico dónde guardar<br />

la información). De hecho, se puede asignar el valor de una constante a una variable<br />

(A = 4;), pero no se puede asignar nada a una constante - es decir, una constante<br />

no puede ser un lvalue (no se puede escribir 4 = A;).<br />

95<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!