93 votes

Rendre une structure volatile rend-elle tous ses membres volatils ?

Si je l'ai fait :

struct whatever {
int data;
};
volatile whatever test;

sera test.data être volatile aussi ?

116voto

Nawaz Points 148870

Une autre question peut être posée (ou simplement une autre façon d'aborder la question initiale) :

Est-ce que faire une structure const faire en sorte que tous ses membres const ?

Si je l'ai fait :

struct whatever { int data; };

const whatever test;

Est-ce que test.data sera const aussi ?

Ma réponse est : Oui. Si vous déclarez un objet de type whatever avec const alors tous ses membres seront const trop

De même, si vous déclarez un objet de type whatever avec volatile alors tous ses membres seront volatile aussi, tout comme si vous déclarez l'objet avec const tous ses membres seront const aussi.

const y volatile sont les deux faces d'une même pièce ; elles sont telles que la Norme les désigne souvent sous le nom de cv-qualifiers .


Citation de la norme ($7.1.5.1/8)

[Note : le volatile est un indice pour le mise en œuvre pour éviter une optimisation agressive impliquant l'objet parce que la valeur de l'objet pourrait être modifié par des moyens indétectables par une mise en œuvre. Voir 1.9 pour une sémantique sémantique détaillée. En général, la sémantique de volatile est censée être la même en C + + qu'elle ne l'est en C. ]

Cela signifie que si votre objet est une instance d'un struct, alors le compilateur ne peut pas éviter une optimisation agressive impliquant l'objet , sauf si il évite l'optimisation agressive de chacun de ses membres. (Sinon, comment éviter l'optimisation impliquant l'objet).


Sujet connexe :

Pourquoi utilise-t-on le mot-clé volatile en C++ ?

-1voto

Virtually Real Points 408

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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X