J’ai téléchargé le code de base de Chromium et j’ai couru dans l’ espace de noms WTF .
namespace WTF { /* * C++'s idea of a reinterpret_cast lacks sufficient cojones. */ template 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? Pourrait être ainsi, l’implémentation de bitwise_cast
spécifiée ici ne comstackra pas si TO
ou FROM
n’est pas un POD et n’est pas (AFAIK) plus puissant que C ++ intégré à reinterpret_cast
.
Le seul sharepoint lumière que je vois ici est que personne ne semble utiliser bitwise_cast
dans le projet Chromium.
Il est court pour les frameworks de travail Web et fournit des fonctions couramment utilisées partout dans la base de code WebKit.
C’est pour éviter le problème d’optimisation de l’aliasing ssortingct:
gcc, ssortingct-aliasing, et casting à travers une union
Pourrait-il en être ainsi, l’implémentation bitwise_cast spécifiée ici produit 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 échouerait avec le standard C ++ actuel car vous ne pourriez pas les mettre en union.