Sur les talons de a specific problem, une auto-réponse et des commentaires, je voudrais comprendre si c'est une solution appropriée, solution de contournement/hack ou tout simplement faux.Alias de pointeur strict: l'accès via un pointeur 'volatile'/référence une solution?
Plus précisément, je Code récrit:
T x = ...;
if (*reinterpret_cast <int*> (&x) == 0)
...
Comme:
T x = ...;
if (*reinterpret_cast <volatile int*> (&x) == 0)
...
avec un qualificatif volatile
au pointeur. Supposons simplement que le traitement T
comme int
dans ma situation est logique. Est-ce que cet accès via une référence volatile
résout un problème d'aliasing de pointeur?
Pour une référence, de la spécification:
[Note: volatile est une allusion à la mise en œuvre pour éviter agressive optimisation impliquant l'objet parce que la valeur de l'objet peut être modifié par indétectables par un la mise en oeuvre. Voir 1.9 pour la sémantique détaillée . En général, la sémantique des volatiles sont destinées être le même en C++ comme ils sont en C. - Note de fin]
EDIT:
Le code ci-dessus ne résout mon problème au moins sur GCC 4.5 .
Cette question n'est pas ** clairement spécifique à C++. Les distributions de style C++ peuvent être réécrites en C. – curiousguy
@curiousguy C et C++ ont des règles de langage différentes cependant –
@MattMcNabb Comment sont les différents WRT 'volatile'? – curiousguy