Question

J'ai téléchargé la base de code de Chromium et j'ai lu 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

Cela signifie-t-il ce que je pense que cela signifie? L’implémentation bitwise_cast 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 le C ++ intégré dans réinterpréter_cast .

Le seul point lumineux que je vois ici est que personne ne semble utiliser bitwise_cast dans le projet Chromium.

Était-ce utile?

La solution

C’est l’abréviation de W eb T qui emploie F un ramework et fournit des fonctions couramment utilisées dans l’ensemble de la base de code WebKit.

Autres conseils

C’est pour éviter le problème d’optimisation strict du crénelage:

gcc, aliasing strict et diffusion par le biais d'une union

  

Pourrait être vrai, 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 échouera avec la norme C ++ actuelle. parce que vous ne pourriez pas les mettre en union.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top