wtf è WTF? (nella base di codici WebKit)
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.
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:
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.