Ich habe die Codebasis von Chromium heruntergeladen und bin über den WTF-Namespace gelaufen .
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
Bedeutet das, was ich denke, dass es bedeutet? Möglicherweise wird die bitwise_cast
hier angegebene Implementierung nicht kompiliert, wenn entweder ein POD vorhanden ist TO
oder FROM
nicht, und ist nicht (AFAIK) leistungsfähiger als C ++ .reinterpret_cast
Der einzige Lichtpunkt, den ich hier sehe, ist der, den niemand bitwise_cast
im Chromium-Projekt zu verwenden scheint .
Antworten:
Es ist die Abkürzung für W eb T emplate F AHMT und Funktionen in der ganzen WebKit Codebasis häufig verwendet wird, liefert.
quelle
Damit soll das Problem der strengen Aliasing-Optimierung vermieden werden:
gcc, striktes Aliasing und Casting durch eine Union
quelle
Wenn FROM oder TO keine POD-Typen sind, schlägt die Kompilierung mit dem aktuellen C ++ - Standard fehl, da Sie sie nicht in Union zusammenfassen können.
quelle