En los talones de a specific problem, una auto-respuesta y comentarios, me gustaría entender si es una solución adecuada, solución/pirateo o simplemente incorrecta.Alias de puntero estricto: ¿es el acceso a través de un puntero/referencia 'volátil' una solución?
Específicamente, Reescribí código:
T x = ...;
if (*reinterpret_cast <int*> (&x) == 0)
...
Como:
T x = ...;
if (*reinterpret_cast <volatile int*> (&x) == 0)
...
con un calificador volatile
al puntero.
Supongamos que tratar T
como en mi situación tiene sentido. ¿Este acceso a través de una referencia volatile
soluciona el problema de alias del puntero?
Para una referencia, a partir de la especificación:
[Nota: volátil es un indicio a la aplicación para evitar agresiva optimización que implica el objeto debido a que el valor del objeto podría ser cambiada por medio indetectables por una implementación. Ver 1.9 para semántica detallada. En general, la semántica de volátil están destinados que ser el mismo en C++ como lo son en C. - nota final]
EDIT:
El código anterior se ha solucionado mi problema al menos en GCC 4.5 .
Esta pregunta es ** no ** claramente específica de C++. Los moldes de estilo C++ se pueden reescribir trivialmente en C. – curiousguy
@curiousguy C y C++ tienen reglas de lenguaje diferentes, sin embargo –
@MattMcNabb ¿Cómo son los diferentes WRT 'volátiles'? – curiousguy