wtf - это WTF? (в базе кода WebKit)


Я скачал хром код базы и побежал через пространство имен 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

означает ли это то, что я думаю, что это означает? Может быть и так, то bitwise_cast реализация указанного здесь не будет компилироваться, Если либо TO или FROM - это не POD и не является (AFAIK) более мощным, чем c++ встроенный reinterpret_cast.

единственная точка света, которую я вижу здесь, - это никто, кажется, не использует bitwise_cast в Хром проект.

3 83

3 ответа:

Это сокращение от Web Template Framework и предоставляет обычно используемые функции по всей кодовой базе WebKit.

Это делается для того, чтобы избежать проблемы оптимизации строгого сглаживания:

gcc, строгое сглаживание и литье через Союз

может быть так, реализация bitwise_cast, указанная здесь, дает неопределенное поведение, Если либо TO, либо FROM не является POD

Если FROM или TO не являются типами POD, компиляция завершится ошибкой с текущим стандартом C++ потому что ты не сможешь их объединить.