web-dev-qa-db-fra.com

wtf est WTF? (dans la base de code WebKit)

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.

89
Motti

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.

79
ismail

C'est pour éviter le problème d'optimisation strict-aliasing:

gcc, alias strict et transtypage via une union

5
Stan

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.

2
Artyom