Por lo que yo entiendo, GCC admite todas sus características C99 en C++. Pero, ¿cómo se maneja el aliasing estricto C99 en el código C++?C99 reglas estrictas de aliasing en C++ (GCC)
Sé que la conversión con C conversiones entre tipos no relacionados no es estricta-aliasing-safe y puede generar código incorrecto, pero ¿qué pasa con C++? Como el alias estricto no es parte del estándar de C++ (¿es correcto?), GCC debe especificar la semántica en sí misma.
Me figuran const_cast
y static_cast
emitidos entre tipos relacionados, por lo tanto son seguros, mientras que reinterpret_cast
pueden romper reglas de alias estrictas.
¿Es esto una correcta comprensión?
Tienes razón, estaba pensando en la palabra clave C.99 'restrict', en lugar de un alias estricto. Por alguna razón, ha arraigado en mi mente de esta manera ("C99" + "aliasing estricto"). –
Entonces, ¿qué es exactamente la cláusula en cuestión?¿Significa que cualquier código C89/C99/C++ 98 que rompe reglas de alias estrictas es técnicamente incorrecto (salvo los modificadores específicos del compilador como -fno-strict-aliasing)? –
@Checkers: agregué los números a mi respuesta. Y sí, el código que rompe reglas de alias estrictas muestra un comportamiento indefinido, también en C89 y en C++ 98. – AnT