Regla de alias estricto (strict aliasing rule) en C++: ¿qué es y cómo evitar UB?
¡Hola a todos! Empecé a estudiar C++ y me topé con el término "strict aliasing rule". Honestamente, no termino de entender qué es y por qué es importante.
Escribí un pequeño código que, según creo, debería funcionar, pero a veces se comporta de manera extraña. Intento leer el contenido de una variable float como un array de bytes:
```cpp
#include
float value = 3.14f;
int* ptr = reinterpret_cast(&value);
std::cout << *ptr << std::endl; // Obtengo un valor basura
```
Pensé que `reinterpret_cast` simplemente reinterpreta los bits, y obtendría la representación entera del número de punto flotante. Pero el compilador parece hacer algo inesperado a veces, y el código puede fallar o dar resultados extraños.
He oído que esto está relacionado con las optimizaciones del compilador. Mi compilador (GCC con flags -O2) genera código que no se comporta como espero. En debug todo funciona, pero en release no.
Expliquen, por favor, ¿qué es la "regla de alias estricto"? ¿Por