wtf es WTF? (en base de código WebKit)


Descargué la base de código de Chromium y corrí a través del espacio de nombres 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 esto lo que creo que significa? Podría ser así, la implementación bitwise_cast especificada aquí no se compilará si TO o FROM no es un POD y no es (AFAIK) más potente que C++ construido en reinterpret_cast.

El único punto de luz que veo aquí es que nadie parece estar usando bitwise_cast en el proyecto Chromium.

Author: kennytm, 2009-05-07

3 answers

Es corto para Web Template Framework y proporciona las funciones más utilizadas en todo el WebKit de código base.

 74
Author: ismail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-16 08:24:53

Es para evitar el problema de optimización de alias estrictos:

Gcc, strict-aliasing, and casting through a union

 5
Author: Stan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:54:48

Podría ser así, la implementación de bitwise_cast especificada aquí produce un comportamiento indefinido si HACIA o DESDE no es un POD

Si FROM o TO no son tipos de POD, la compilación fallaría con el estándar actual de C++ porque no serías capaz de ponerlos en unión.

 2
Author: Artyom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-05-07 11:56:31