Stavo passando un po 'di codice in CodeProject e ho trovato il seguente codice per il cast di C++.Implementazione di C++ Cast
template <class OutputClass, class InputClass>
union horrible_union{
OutputClass out;
InputClass in;
};
template <class OutputClass, class InputClass>
inline OutputClass horrible_cast(const InputClass input){
horrible_union<OutputClass, InputClass> u;
u.in = input;
return u.out;
}
Perché il cast ha implementato il modo sopra descritto. Perché non possiamo semplicemente fare un cast manuale. Qualcuno può dare un esempio di quando un cast normale non funzionerebbe?
L'accesso a un membro di un'unione dopo aver impostato un membro diverso è un comportamento non definito, quindi tutto è meglio di questo approccio "orribile_union". –
Probabilmente è per questo che si chiama cast orribile. Questo è fondamentalmente per implementare alcuni comportamenti specifici del compilatore. – KodeWarrior