型キャスト
d:id:youandi:20060503#p3
const void*型 を void*型 に突っ込んだつもりだったが、オーバーロードで bool型 のI/Fもあった為、bool型 で動作してしまってた。
#include <stdlib.h> #include <stdio.h> class CHoge { public: static void Func( bool bHoge ) { fprintf( stdout, "bool\n" ); } static void Func( void* pHoge ) { fprintf( stdout, "void*\n" ); } }; int main( int nArgC, char** ppArgV ) { const double dHoge = 1.0; CHoge::Func( reinterpret_cast<const void*>( &dHoge ) ); (void)::fgetc( stdin ); return 0; }
実行結果は「bool」が返ってくる。
因みにLinux上のGCCだと特にワーニングはでないが、VisualC++6.0ではbool型に変換されるとのワーニングが出る。Linux上でデバッグしても埒ががあかなかったのでWindows上でやってみたら一発解決・・・orz。先週末から約一日無駄にしてしまった。
なまじっかC++のキャストスタイルにした際に手抜きをした為発生。正しくは下記のようにする。
CHoge::Func( const_cast< void* >( reinterpret_cast< const void* >( &dHoge ) ) ); CHoge::Func( reinterpret_cast< void* >( const_cast< double* >( &dHoge ) ) );