const volatile, inscrivez-volatile, statique volatile en C++
Je me pose des questions sur les différentes utilisations de la volatils mot-clé en combinaison avec registre, const et statique mots-clés. Je ne suis pas sûr de ce que sont les effets, donc je pense que:
register volatile int T=10;
Suggèrent que le compilateur magasin de T dans un registre et la valeur de T peut être modifié à partir de quelque part à l'extérieur (système d'exploitation, du matériel, un autre thread)
const volatile int T=10;
Le programme lui-même ne peut pas modifier T, mais peut être modifié frow quelque part en dehors du code.
static volatile int T=10;
Si T est un membre de données d'une classe, cela signifie que tous les objets de la classe ont la même valeur pour T et T peut être modifié à partir de quelque part à l'extérieur. Si T est une variable globale dans un fichier, le code source dans d'autres fichiers (qui sont partie intégrante du projet) ne peut pas accéder T, mais peut être consulté à partir de quelque part à l'extérieur. Si T est une variable locale dans une fonction,une fois qu'il a été initialisé reste en mémoire jusqu'à la fin du programme et peut être modifié à partir de quelque part à l'extérieur.
Sont mes pensées correctes et qu'elles peuvent tout expérimenté, développeur C++, donner un exemple où le ci-dessus peut être utilisé dans des applications du monde réel ou c'est très rare?
- Très sympa! +1. Pourrait même inclure
mutable
.
Vous devez vous connecter pour publier un commentaire.
volatile
qualificatif signifie que le compilateur ne peut pas appliquer des optimisations ou de réorganiser l'accès àT
, Tandis queregister
est une allusion au compilateur queT
sera fortement utilisé. Si l'adresse deT
est pris, l'astuce est tout simplement ignoré par le compilateur. Notez queregister
est obsolète mais encore utilisé.Utilisation Pratique:
Je ne l'ai jamais utilisé jamais senti le besoin et ne peut pas vraiment penser à tout instant.
const
qualificatif signifie que leT
ne peuvent pas être modifiés à l'aide de code. Si vous tentez de le faire de sorte que le compilateur va fournir un diagnostic.volatile
signifie toujours la même que dans le cas 1. Le compilateur ne peut pas optimiser ou de réorganiser l'accès àT
.Utilisation Pratique:
static
de stockage qualificatif donneT
statique de la durée de stockage (C++11 §3.7) et une liaison interne, tandis quevolatile
régit encore de l'optimisation et de réorganisation.Utilisation Pratique:
volatile
sauf que vous avez besoin de l'objet pour avoir statique de la durée de stockage et d'être inaccessibles à partir d'autres unités de traduction.unsigned char const volatile *hd_addr;
const volatile int T=10;
qui est différent. 🙂const volatile int
n'est pas aussistatic
, il pourrait potentiellement carte pour le matériel. L'éditeur de liens trucs de ce genre sont à éviter car ils ne sont pas très intuitif, mais je les ai vu avant dans les bas-niveau intégré choses.volatile
, qui, manifestement, n'ont une variété d'applications du monde réel. Le contexte de votre citation est un commentaire sur l'utilité de la combinaison spécifique deregister volatile
.