ExpertiDict

C++ · Avançado · Inglês · Técnico

strict aliasing

strɪkt ˈeɪliəsɪŋsubstantivo

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 ok

Exemplos

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.

Veja também

Todos os termos de C++