Si j'ai:
struct whatever {
int data;
};
volatile whatever test;
sera test.dataaussi volatile?
Si j'ai:
struct whatever {
int data;
};
volatile whatever test;
sera test.dataaussi volatile?
Réponses:
Une autre question peut être posée (ou simplement une autre façon de regarder la question d'origine):
constfait tous ses membres const?Si j'ai:
struct whatever { int data; };
const whatever test;
Est-ce que test.data le sera constaussi?
Ma réponse est: oui. Si vous déclarez un objet de type whateveravec constalors tous ses membres le seront constaussi
De même, si vous déclarez un objet de type whateveravec volatilealors tous ses membres le seront volatileaussi, tout comme si vous déclarez l'objet avec const, tout son membre le sera constaussi.
constet volatilesont deux faces de la même pièce; ils sont de sorte que la norme les appelle souvent cv-qualifiers.
Citation de la norme (7.1.5.1 / 8 $)
[Note: volatile est un indice à l'implémentation pour éviter une optimisation agressive impliquant l'objet car la valeur de l'objet pourrait être modifiée par des moyens indétectables par une implémentation. Voir 1.9 pour une sémantique détaillée. En général, la sémantique de volatile est censée être la même en C ++ que dans C.]
Cela signifie que si votre objet est une instance d'une structure, le compilateur ne peut pas éviter une optimisation agressive impliquant l'objet , à moins qu'il n'évite une optimisation agressive de chacun de ses membres. (Sinon, comment éviter l'optimisation impliquant l'objet?)
Sujet connexe:
De: http://msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx
Pour déclarer l'objet pointé par le pointeur comme const ou volatile, utilisez une déclaration de la forme:
const char *cpch;
volatile char *vpch;
Pour déclarer la valeur du pointeur - c'est-à-dire l'adresse réelle stockée dans le pointeur - comme const ou volatile, utilisez une déclaration de la forme:
char * const pchc;
char * volatile pchv;
volatilefonction membre ne fait que rendre lethispointeur volatil, donc les membres seront lus de la mémoire à chaque fois qu'ils sont accédés mais ne sont pas «officiellement» volatils.