J'ai téléchargé la base de code de Chromium et j'ai parcouru l' 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, l' bitwise_cast
implémentation spécifiée ici ne se compilera pas si l'un TO
ou l' autre FROM
n'est pas un POD et n'est pas (AFAIK) plus puissant que le C ++ intégré reinterpret_cast
.
Le seul point de lumière que je vois ici est que personne ne semble utiliser bitwise_cast
dans le projet Chromium.
Réponses:
C'est l'abréviation de W eb T emplate F ramework et fournit des fonctions couramment utilisées dans toute la base de code WebKit.
la source
C'est pour éviter le problème d'optimisation de l'alias strict:
gcc, alias strict et transtypage via une union
la source
Si FROM ou TO ne sont pas des types POD, la compilation échouerait avec le standard C ++ actuel car vous ne pourriez pas les mettre en union.
la source