2011-07-19 10 views
6

可能性の重複:優れている
C++ When should we prefer to use a two chained static_cast over reinterpret_castchar *からT *へのキャストはどうですか?

bufferchar *(タイプTの値を含むメモリチャンク)である

static_cast<T *>(static_cast<void *>(buffer)); 

又は

reinterpret_cast<T *>(buffer); 

+0

ここで最初に読んでください:http://stackoverflow.com/questions/332030/when-should-static-cast-dynamic-cast-and-reinterpret-cast-be-used – jenseb

答えて

0

実際に行う必要がある場合はreinterpret_castです。それはstatic_castダンスよりも理解できる方法です。

4

reinterpret_castは、整数型を元の型に戻すために使用する必要があります。 char *が実際にT *だった場合、reinterpret_castは正しいことを行います。他のゲームをプレイしている場合、使用する必要がありますstatic_cast

+0

この場合はどうなりますか?ここで私はあなたが言ったこととは異なる何かを持っている、私はこの方法 '新しいchar [size]'を作成したメモリプールを持っていると私は配置演算子newを介してタイプTのオブジェクトを作成し、私は 'some_cast (バッファ)+ next_object_position'を使用しています。この** some_cast **は私が求めているものです。 –

2

これは概念的に行っているので、reinterpret_castを使用してください。 static_castは、コンパイラーが変換の仕方を知っていることを期待するときに使用されます。それは実際にそれを行う方法がわからない場合、コンパイラはエラーを生成するので、安全機構です。 Reinterpret_castは、「信頼してください、ここのビットはこのタイプです」と言いたいときに使用されます。

1

誰も優れているわけではありませんが、問題はどちらが悪くないかです。

static_castは、実際にバッファがTの場合にのみ動作することが保証されています。アドレスをvoid*に変換して元に戻すことができます。それが他のタイプのものであれば、動作するかどうかは実装に依存します。アライメントの問題は潜在的な問題の1つに過ぎません。

reinterpret_castを使用することは、常に実装に依存します。このように、それはうまく動作しませんが、少なくとも、これは移植可能なコードではないことが明らかになります。

したがって、ここではreinterpret_castを使用します。

関連する問題