Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
Pensar en C++ (Volumen 1) - Grupo ARCO
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 />
✐