web-dev-qa-db-ja.com

wtfはWTFですか? (WebKitコードベース)

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ここで指定された実装は、TOまたはFROM[〜#〜] pod [〜#〜] でなく(AFAIK)でない場合はコンパイルされません組み込みのC++よりも強力なreinterpret_cast

ここで私が目にする唯一の光のポイントは、誰もbitwise_cast Chromiumプロジェクト内。

89
Motti

[〜#〜] w [〜#〜] eb [〜#〜] t [〜#〜] emplate [〜#〜]の略ですf [〜#〜] rameworkであり、WebKitコードベース全体で一般的に使用される関数を提供します。

79
ismail

厳密なエイリアシングの最適化問題を回避するためです。

gcc、strict-aliasing、およびユニオンによるキャスト

5
Stan

そうかもしれませんが、ここで指定されたbitwise_cast実装は、TOまたはFROMのいずれかがPODでない場合、未定義の動作をもたらします。

FROMまたはTOがPODタイプではない場合、それらを結合することができないため、現在のC++標準ではコンパイルが失敗します。

2
Artyom