S'il n'y a aucune possibilité que le corps de la boucle puisse légitimement changer m_stop
, alors ceci est une optimisation permise.
Si le compilateur ne peut pas voir le contenu des fonctions dans la boucle, alors il doit supposer qu'il peut changer m_stop
.
Si un pointeur ou une référence à m_stop
ou *this
sont stockées quelque part accessible au code qui fonctionne dans le corps de la boucle, le compilateur devrait faire une analyse plus approfondie afin de déterminer s'il est sûr de supposer m_stop
n » t changer. S'il ne peut pas faire cette analyse, alors il doit supposer que m_stop
peut changer si le corps de la boucle change tout ce qui pourrait potentiellement se référer à m_stop
.
Oui, un compilateur pourrait le faire. Vous pouvez l'éviter en rendant la variable 'volatile'. –
pas si «faire les choses» modifie 'this-> m_stop' potentiellement –
D'une manière générale, une optimisation est légale si, et seulement si, un programme conforme aux normes ne peut pas faire la différence dans le comportement garanti. –