Pergunta

Eu transferi Cromo 's base de código e correu através do WTF namespace .

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

Isso significa que eu acho que isso significa? Poderia ser assim, a implementação bitwise_cast especificado aqui não será compilado se qualquer TO ou FROM não é um POD e não (AFAIK) é mais potente do que C ++ construído em reinterpret_cast.

O único ponto de luz que vejo aqui é a ninguém parece estar usando bitwise_cast no projeto Chromium.

Foi útil?

Solução

É curto para W eb T emplate F UADRO e fornece funções comumente utilizado em todo o código base WebKit.

Outras dicas

É para evitar o problema de otimização estrita-aliasing:

gcc, rigoroso-aliasing, e lançando através de uma união

Pode ser assim, a implementação bitwise_cast especificado aqui produz um comportamento indefinido se para ou de não é um POD

Se de ou para não são tipos POD, a compilação falharia com corrente C ++ padrão porque você não seria capaz de colocá-los em união.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top