wtf é WTF? (Na base de código WebKit)
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.
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:
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.