Regra de aliasing estrito (strict aliasing rule) em C++: o que é e como evitar UB?
Olá a todos! Comecei a estudar C++ e me deparei com o termo "strict aliasing rule". Honestamente, não entendo completamente o que é e por que é importante.
Escrevi um pequeno código que, ao que parece, deveria funcionar, mas às vezes se comporta de forma estranha. Estou tentando ler o conteúdo de uma variável float como um array de bytes:
```cpp
#include
float value = 3.14f;
int* ptr = reinterpret_cast(&value);
std::cout << *ptr << std::endl; // Recebo algum valor lixo
```
Pensei que `reinterpret_cast` apenas reinterpretaria os bits, e eu obteria a representação inteira do número de ponto flutuante. Mas o compilador parece, às vezes, fazer algo inesperado, e o código pode travar ou produzir resultados estranhos.
Ouvi dizer que isso está relacionado às otimizações do compilador. Meu compilador (GCC com flags -O2) gera código que não se comporta como espero. Na depuração, tudo funciona, mas na versão de release, não.
Expliquem, por favor, o que é a "regra de aliasing estrito"? Por que