Quel est le but d'une fonction membre volatile
en C++?Quel est le but d'une fonction membre volatile en C++?
Répondre
EDIT:
Cette réponse a été affiché lorsque la question était sur le mot-clé volatile. La question semble avoir été modifiée par un tiers.
ORIGINAL:
volatil informe le compilateur qu'il ne doit pas supposer que la valeur qu'elle vient de mettre dans la variable marquée comme volatile sera là la prochaine fois qu'il utilise ... qu'il doit vérifier la valeur actuelle avant l'utiliser à nouveau.
Un exemple est si la variable représente un emplacement de mémoire qui pourrait être changé par un autre processus.
Voici un exemple (été âges depuis que je l'ai fait en C++ donc s'il vous plaît pardonnez les petits problèmes de syntaxe):
volatile int x;
int DoSomething()
{
x = 1;
DoSomeOtherStuff();
return x+1; // Don't just return 2 because we stored a 1 in x.
// Check to get its current value
}
Ceci est correct. Il est souvent utilisé dans les applications embarquées et en temps réel. Et – penguin4hire
indique au compilateur de ne pas effectuer des optimisations sur elle ... – jasonline
@jasonline: il indique au compilateur qu'il ne doit pas modifier le nombre ou l'ordre de lecture et d'écriture, et il ne doit pas déplacer tout ou lit les écritures sur les points de séquence. Il ne dit pas exactement "ne pas effectuer d'optimisations". Par exemple, les boucles qui modifient les volatiles peuvent encore être déroulées et l'accès au code volatil peut être déplacé à travers des accès non-volatils. Je suppose que même l'exécution spéculative serait OK à condition que vous ayez de la mémoire transactionnelle matérielle et pas d'adresses E/S magiques. –
Pour répondre à la question sur ce que cela signifie d'avoir une « fonction membre volatile » (qui peut ou peut-être pas ce qui était prévu à l'origine par la personne qui a posté la question), marquant une fonction membre comme const
ou volatile
(ou un combiné const volatile
) applique ces qualificatifs au pointeur this
utilisé dans la fonction. Comme indiqué par la norme (9.2.1 « this
Le pointeur »):
Le type de ce dans une fonction de membre d'un
class X
est. Si la fonction de membre est déclaréconst
, le type de c'estconst X*
, si la fonction de membre est déclarévolatile
, le type dethis
estvolatile X*
, et si la fonction de membre est déclaréconst volatile
, le type de c'estconst volatile X*
.
Ainsi, en marquant la fonction membre comme volatile
vous gagnerais tout accès aux membres de données non statiques de l'objet dans cette fonction de membre comme volatile
.
Donc, en pratique, si 'obj' est 'volatile Object * obj', vous ne pouvez pas appeler une fonction membre marquée' non volatile '. – bobobobo
Fonction autre que fonction/membre. –
Question reformulée. –
Pourquoi est-ce renommé en "mot clé volatile"? Il y a des fonctions membres volatiles. – tiftik