reinterpret_cast使用説明
3298 ワード
reinterpret_cast <new_type> (expression)
reinterpret_cast ! , ! , !
, , int , , !
例を見てみましょう
int *pi;
char *pc = reinterpret_cast<char*>(pi);
OK, reinterpret_cast , , ,pc int , char~
reinterpret_の場合cast演算子は慎重に使用し、IBM C++を参照してください.
reinterpret_castは完全に異なるタイプの意味にマッピングするためで、このキーワードは私たちがタイプを元のタイプにマッピングする必要があるときに使用します.我々がマッピングしたタイプは,すべてのマッピングの中で最も危険であることを明らかにするためだけであり,他の目的を明らかにするためである.(この言葉はC++プログラミング思想の原話です)
皆さんが使うときはくれぐれも覚えておいてください.むやみに使わないでください.誤った使用はプログラムの不安全を招きやすい!Misuse of the reinterpret_cast operator can easily be unsafe. これはMSDNの原話です!
もちろんreinterpret_cast対const,volatile,or_unalignedも役に立たない!
MSDNの上で1つの実際的な用途をあげました:ハッシュ関数の補助
// expre_reinterpret_cast_Operator.cpp
// compile with: /EHsc
#include <iostream>
// Returns a hash code based on an address
unsigned short Hash( void *p ) {
unsigned int val = reinterpret_cast<unsigned int>( p );
return ( unsigned short )( val ^ (val >> 16));
}
using namespace std;
int main() {
int a[20];
for ( int i = 0; i < 20; i++ )
cout << Hash( a + i ) << endl;
}
強制タイプ変換については、それぞれの用途がありますが、頻繁に使用しないでください.使用するたびに、同じ目的を達成できる他の方法があるかどうかを試してみましょう.使用する必要がある場合は、強制変換の役割ドメインを制限し、仮定に関連するタイプを記録して、エラーの発生を減らすことができます.