92

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ここで指定された実装は、PODであるか、PODでなく、組み込みのC ++よりも強力ではない(AFAIK)場合はコンパイルTOFROMませreinterpret_cast

ここで私が目にする唯一の光点はbitwise_cast、Chromiumプロジェクトで誰も使用していないように見えることです。

4

3 に答える 3

84

Webテンプレート フレームワークの略で、 WebKitコードベース全体で一般的に使用される機能を提供します。

于 2009-05-07T12:00:42.340 に答える
5

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

gcc、strict-aliasing、union によるキャスト

于 2010-06-10T17:24:57.017 に答える
2

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

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

于 2009-05-07T11:56:31.213 に答える