Domanda

Ho scaricato la base di codice di Chromium e mi sono imbattuto nella spazio dei nomi 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

Significa ciò che penso significhi? Potrebbe essere così, l'implementazione bitwise_cast qui specificata non verrà compilata se TO o FROM non è POD e non è (AFAIK) più potente del C ++ integrato in reinterpret_cast .

L'unico punto di luce che vedo qui è che nessuno sembra usare bitwise_cast nel progetto Chromium.

È stato utile?

Soluzione

È l'abbreviazione di W eb T emplate F ramework e fornisce funzioni di uso comune in tutto il codice WebKit.

Altri suggerimenti

È per evitare il problema dell'ottimizzazione aliasing rigoroso:

gcc, aliasing rigoroso e casting in un sindacato

  

Potrebbe essere così, l'implementazione bitwise_cast qui specificata produce un comportamento indefinito se TO o FROM non è un POD

Se FROM o TO non sono tipi POD, la compilazione fallirebbe con l'attuale standard C ++ perché non saresti in grado di metterli in unione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top