J'ai téléchargé la base de code de Chromium et parcouru le espace de noms WTF .
namespace WTF {
/*
* C++'s idea of a reinterpret_cast lacks sufficient cojones.
*/
template<typename TO, typename FROM>
TO bitwise_cast(FROM in)
{
COMPILE_ASSERT(sizeof(TO) == sizeof(FROM), WTF_wtf_reinterpret_cast_sizeof_types_is_equal);
union {
FROM from;
TO to;
} u;
u.from = in;
return u.to;
}
} // namespace WTF
Est-ce que cela signifie ce que je pense que cela signifie? Cela pourrait être le cas, le bitwise_cast
l'implémentation spécifiée ici ne sera pas compilée si TO
ou FROM
n'est pas un POD et n'est pas (AFAIK) plus puissant que C++ intégré dans reinterpret_cast
.
Le seul point de lumière que je vois ici est que personne ne semble utiliser bitwise_cast
dans le projet Chromium.
C'est l'abréviation de W eb T emplate F cadre et fournit des fonctions couramment utilisées partout dans la base de code WebKit.
C'est pour éviter le problème d'optimisation strict-aliasing:
Cela pourrait être le cas, l'implémentation bitwise_cast spécifiée ici donne un comportement indéfini si TO ou FROM n'est pas un POD
Si FROM ou TO ne sont pas des types POD, la compilation échouera avec la norme C++ actuelle car vous ne pourrez pas les mettre en union.