高速逆平方根関数に代表される、型パニングへの従来のアプローチには、ビット パターンの再解釈が含まれていました。低レベルのキャストを使用して、ある型を別の型として変換します。ただし、このアプローチには次のような落とし穴があります。
最新の C には、型パンニングのためのより安全で信頼性の高いメカニズムがいくつかあります。
std::bit_cast は、x のビット パターンを型 T の新しいオブジェクトにコピーします。これは、次のことが保証されるため、型パニングに推奨される方法です。
メモリ位置間でバイトをコピーするために std::memcpy を使用することも、安全なオプションです。以下の場合に適しています。
この手法は、既存のオブジェクト x:
new (&x) T; return *std::launder(reinterpret_cast<T*>(&x));
のメモリを使用してタイプ T の新しいオブジェクトを作成するために使用できます。 std::bit_cast に似ていますが、キャスト前にメモリ内容を変更できます。
std::byte は単一バイトを表し、他の型のビット パターンを再解釈するために使用できます。
return *reinterpret_cast<T*>(reinterpret_cast<std::byte*>(&x));
このメソッドは元のメソッドと似ています。 reinterpret_cast ですが、バイト順序とアライメントを明示的に制御できます。
std::bit_cast を使用すると、高速逆平方根関数は次のように書き換えることができます。
float fast_inverse_square_root(float number) { // Assuming sizeof(long) == sizeof(float) on target platform return std::bit_cast<float>(0x5f3759df - ( std::bit_cast<long>(number) >> 1 )); }
このバージョンは安全でパフォーマンスが高く、最新の C のベスト プラクティスに準拠しています。 .
以上が最新の C で語呂合わせを安全に入力するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。