Ne faire une struct volatils faire tous ses membres volatile?
Si j'ai:
struct whatever {
int data;
};
volatile whatever test;
va test.data
être volatile trop?
- Excellente question. J'ai lu que le fait d'avoir un
volatile
fonction membre ne fait que lethis
pointeur de volatiles, de sorte que les membres seront lus à partir de la mémoire chaque fois qu'ils sont accessibles, mais ne sont pas "officiellement" volatile. - Éventuellement doublon, mais encore une bonne question.
Vous devez vous connecter pour publier un commentaire.
Une autre question peut être posée (ou tout simplement une autre façon de considérer la question d'origine):
Ne faire une struct
const
faire tous ses membresconst
?Si j'ai:
Permettra de tester.les données
const
trop?Ma réponse est : Oui. Si vous déclarez un objet de type
whatever
avecconst
alors tous ses membres serontconst
tropDe même, si vous déclarez un objet de type
whatever
avecvolatile
alors tous ses membres serontvolatile
trop, juste comme si vous déclarez l'objet avecconst
, tous les membres serontconst
trop.const
etvolatile
sont les deux faces d'une même pièce; ils sont alors que la Norme se réfère souvent à eux commecv-qualifiers
.Citant le Standard ($7.1.5.1/8)
Cela signifie que, si votre objet est une instance d'une structure (struct), alors le compilateur ne peut pas éviter agressives d'optimisation impliquant l'objet, sauf il évite les agressifs optimisation de chacun de ses membres. (Sinon, de quelle autre façon peut éviter d'optimisation impliquant l'objet?)
Sujets connexes:
Pourquoi utilisons-nous mot clé volatile en C++?
À partir de: http://msdn.microsoft.com/en-us/library/145yc477%28v=vs.80%29.aspx
De déclarer l'objet pointé par le pointeur const ou volatile, utiliser une déclaration de la forme:
De déclarer la valeur du pointeur, à l'adresse stockée dans le pointeur — comme const ou volatile, utiliser une déclaration de la forme: