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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

✐<br />

✐<br />

✐<br />

“Volum<strong>en</strong>1” — 2012/1/12 — 13:52 — page 245 — #283<br />

✐<br />

8.5. Volatile<br />

claración de la clase para indicar que un atributo determinado se puede cambiar aún<br />

pert<strong>en</strong>eci<strong>en</strong>do a un objeto constante.<br />

//: C08:Mutable.cpp<br />

// The "mutable" keyword<br />

class Z {<br />

int i;<br />

mutable int j;<br />

public:<br />

Z();<br />

void f() const;<br />

};<br />

Z::Z() : i(0), j(0) {}<br />

void Z::f() const {<br />

//! i++; // Error -- const member function<br />

j++; // OK: mutable<br />

}<br />

int main() {<br />

const Z zz;<br />

zz.f(); // Actually changes it!<br />

} ///:~<br />

De este modo el usuario de la clase puede ver <strong>en</strong> la declaración qué miembros<br />

ti<strong>en</strong><strong>en</strong> posibilidad de ser modificados por un método.<br />

ROMability<br />

Si un objeto se define como constante es un candidato para ser almac<strong>en</strong>ado <strong>en</strong><br />

memoria de sólo lectura (ROM), que a m<strong>en</strong>udo es una consideración importante <strong>en</strong><br />

programación de sistemas empotrados. Para conseguirlo no es sufici<strong>en</strong>te con que el<br />

objeto sea constante, los requisitos son mucha más estrictos. Por supuesto, el objeto<br />

debe ser una constante binaria. Eso es fácil de comprobar si la constancia lógica se<br />

implem<strong>en</strong>ta mediante el uso de mutable, pero probablem<strong>en</strong>te el compilador no<br />

podrá detectarlo si se utiliza la técnica del moldeado d<strong>en</strong>tro de un método constante.<br />

Además:<br />

La clase o estructura no puede t<strong>en</strong>er constructores o destructor definidos por<br />

el usuario.<br />

No pued<strong>en</strong> ser clases base (capitulo 14) u objetos miembro con constructores o<br />

destructor definidos por el usuario.<br />

El efecto de una operación de escritura <strong>en</strong> una parte del objeto constante de un<br />

tipo ROMable no está definido. Aunque un objeto pueda ser colocado <strong>en</strong> ROM de<br />

forma conv<strong>en</strong>i<strong>en</strong>te, no todos lo requier<strong>en</strong>.<br />

8.5. Volatile<br />

La sintaxis de volatile es idéntica a la de const, pero volatile significa<br />

«este dato puede cambiar sin que el compilador sea informado de ello». De algún<br />

245<br />

✐<br />

✐<br />

✐<br />

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

Saved successfully!

Ooh no, something went wrong!