Converter uma estrutura em uma matriz [duplicado]

Esta pergunta já tem uma resposta aqui:

O acesso ao primeiro campo de uma estrutura através de uma conversão C viola o aliasing estrito? 1 respostaReinterpretar struct com membros do mesmo tipo que uma matriz de uma maneira compatível com o padrão [duplicado] 5 respostas

Esta é uma pergunta estrita sobre alias, pois o compilador causará problemas com a ordem de otimização.

Diga que eu tenho três públicosfloats em umstruct XMFLOAT3 (não muito diferenteeste.) E eu quero converter para umfloat*. Isso vai me trazer problemas de otimização?

XMFLOAT3 foo = {1.0f, 2.0f, 3.0f};
auto bar = &foo.x;

bar[2] += 5.0f;
foo.z += 5.0f;
cout << foo.z;

Suponho que isso sempre será impresso "13". Mas e esse código:

XMFLOAT3 foo = {1.0f, 2.0f, 3.0f};
auto bar = reinterpret_cast<float*>(&foo);

bar[2] += 5.0f;
foo.z += 5.0f;
cout << foo.z;

Eu acredito que isso é legal porque, de acordo comhttp://en.cppreference.com/w/cpp/language/reinterpret_cast#Type_aliasing

T2 é um tipo agregado ou um tipo de união que mantém um dos tipos mencionados acima como um elemento ou membro não estático (incluindo, recursivamente, elementos de subagregados e membros de dados não estáticos das uniões contidas): isso torna seguro a conversão do primeiro membro de uma estrutura e de um elemento de uma união à estrutura / união que a contém.

Minha compreensão disso está correta?

Obviamente, isso se tornará uma implementação dependente da declaração deXMFLOAT3.

questionAnswers(3)

yourAnswerToTheQuestion