Я загрузил базу кода Chromium и наткнулся на пространство имен 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
Означает ли это то, что я думаю? Может быть, bitwise_cast
указанная здесь реализация не будет компилироваться, если она не является PODTO
или FROM
не является (AFAIK) более мощной, чем встроенный C ++ .reinterpret_cast
Единственная точка света, которую я здесь вижу, - это то, что, похоже, никто не использует bitwise_cast
в проекте Chromium.
Ответы:
Это сокращение от W eb T emplate F ramework и предоставляет часто используемые функции во всей кодовой базе WebKit.
источник
Это сделано для того, чтобы избежать проблемы оптимизации со строгим алиасингом:
gcc, строгое алиасинг и приведение через объединение
источник
Если FROM или TO не являются типами POD, компиляция завершится неудачно с текущим стандартом C ++, потому что вы не сможете объединить их.
источник