5

unsigned long(実際には a DWORD) を として再解釈したいsigned long。私は試した:

DWORD x;
long y = reinterpret_cast<signed long>(x);

ただし、VC++ 2010 Intellisense は「無効な型変換」を教えてくれます。なんで?どうすれば修正できますか?

4

2 に答える 2

9

reinterpret_castunsigned 型を signed 型に変換する必要はありませstatic_castん。

于 2011-07-15T15:23:47.847 に答える
8

代わりに static_cast を試してください。許容度が高すぎるキャスト (static_cast または const_cast で十分な場合に reinterpret_cast を使用するなど) を試みると、VC はエラーを生成します。

C++ には 5 種類のキャストがあり、それぞれにより多くのことが可能になります (より多くの権限が付与されます)。最も許容度の低いキャストはconst_cast<int>(<const int>)、const 修飾子を変更できる const キャスト ( ) です。タイプ セーフな強制変換を実行できる静的キャスト ( static_cast<int>)(<short>)) があります (たとえば、ベースから派生dynamic_cast<derived_type>(base_type)のキャストなど)。最後に、関連のない型間の変換を可能にするキャストがあります - reinterpret_castと C スタイルのキャスト。reinterpret_cast<int>(<void *>)(int)<void *>

これらのさまざまなタイプのキャストをうまく説明する方法がありません。そのため、それぞれがより多くのことを可能にするため、「より寛容」であると説明します。

VC は、他のキャスト タイプの 1 つが目標を達成するのにより適している場合に、再解釈キャストを使用すると警告します。C スタイルのキャストには、下位互換性に関する同様の警告はありません。

于 2011-07-15T15:24:13.617 に答える