Si tengo:
struct whatever {
int data;
};
volatile whatever test;
será test.datavolátil también?
Si tengo:
struct whatever {
int data;
};
volatile whatever test;
será test.datavolátil también?
Respuestas:
Se puede hacer otra pregunta (o simplemente otra forma de ver la pregunta original):
consthace a todos sus miembros const?Si tengo:
struct whatever { int data; };
const whatever test;
¿Test.data consttambién lo será ?
Mi respuesta es: si. Si se declara un objeto de tipo whatevercon el constentonces todos sus miembros serán constdemasiado
De manera similar, si declaras un objeto de tipo whatevercon volatile, todos sus miembros también lo serán volatile, al igual que si declaras el objeto con const, todos sus miembros también lo serán const.
consty volatileson dos caras de la misma moneda; son de modo que el Estándar a menudo se refiere a ellos como cv-qualifiers.
Citando del estándar ($ 7.1.5.1 / 8)
[Nota: volatile es una pista para la implementación para evitar una optimización agresiva que involucre al objeto porque el valor del objeto puede ser cambiado por medios indetectables por una implementación. Consulte 1.9 para conocer la semántica detallada. En general, se pretende que la semántica de volátil sea la misma en C ++ que en C.]
Eso significa que si su objeto es una instancia de una estructura, entonces el compilador no puede evitar una optimización agresiva que involucre al objeto , a menos que evite la optimización agresiva de cada uno de sus miembros. (De lo contrario, ¿de qué otra manera puede evitar la optimización que involucra al objeto?)
Tema relacionado:
De: http://msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx
Para declarar el objeto apuntado por el puntero como constante o volátil, use una declaración de la forma:
const char *cpch;
volatile char *vpch;
Para declarar el valor del puntero, es decir, la dirección real almacenada en el puntero, como constante o volátil, use una declaración de la forma:
char * const pchc;
char * volatile pchv;
volatilefunción miembro solo hace que elthispuntero sea volátil, por lo que los miembros se leerán de la memoria cada vez que se acceda a ellos, pero no son "oficialmente" volátiles.