C++ · Avançado · Inglês · Técnico
strict aliasing
Regra que proíbe acessar um objeto por um ponteiro de tipo incompatível, como ler um float por int*. O compilador assume que tipos diferentes não se sobrepõem e otimiza.
Onde usar
Aparece em código de rede e serialização que faz cast de ponteiros para reinterpretar bytes. Em code review, a correção é usar std::memcpy ou std::bit_cast.
Em código
float f = 1.0f;
// int i = *(int*)&f; // UB
int i = std::bit_cast<int>(f); // C++20
std::memcpy(&i, &f, sizeof i); // também okExemplos
That cast violates strict aliasing; use memcpy or bit cast.
Esse cast viola o strict aliasing; use memcpy ou bit cast.
It works at O0 and breaks at O2, classic strict aliasing violation.
Funciona no O0 e quebra no O2, violação clássica de strict aliasing.
Cuidado
Funcionar em -O0 e quebrar em -O2 é o sintoma típico dessa violação.