Pobrałem Chromium bazę kodu „s i przebiegł przez nazw 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
Czy to oznacza to, co myślę, że to znaczy? Mogło być tak, to bitwise_cast
realizacja podano tutaj, jeśli nie zostanie skompilowany albo TO
czy FROM
nie jest POD i nie jest (AFAIK) mocniejszy niż w C ++ zbudowany reinterpret_cast
.
Jedyny punkt światła, który tutaj widzę, to ten, którego nikt nie używa bitwise_cast
w projekcie Chromium.
Odpowiedzi:
Jest to skrót od W eb T embedate F ramework i zapewnia powszechnie używane funkcje w całej bazie kodu WebKit.
źródło
Ma to na celu uniknięcie problemu optymalizacji ścisłej aliasingu:
gcc, ścisłe aliasing i rzutowanie przez union
źródło
Jeśli FROM lub TO nie są typami POD, kompilacja zakończyłaby się niepowodzeniem z obecnym standardem C ++, ponieważ nie byłbyś w stanie umieścić ich w unii.
źródło