強制変換とメモリ


コンストラクション関数とタイプ強制変換関数を含むこのクラスFunを見てください.

  
  
  
  
  1. class Fun  
  2. {  
  3.     int x;  
  4. public:  
  5.     Fun(){x = 3;}  
  6.     operator int(){return 5;}  
  7. }; 

次のプログラムを実行

  
  
  
  
  1. #include <iostream>  
  2. #include <cstdio>  
  3. #include "fun.h"
  4. using namespace std;  
  5. int main()  
  6. {  
  7.     Fun f;  
  8.     cout << f << endl;// 5  
  9.     printf("%d
    "
    , f);// 3  
  10.     printf("$d
    "
    , (int)f);// 5  
  11.     return 0;  

<<の呼び出しは2番目のパラメータを強制的にintに変換するがprintfの%dは後のパラメータの上位32ビットのみを読み出し,intと解析する.printfを使用してクラスの強制変換方法を呼び出す必要がある場合は、オブジェクトを明示的にタイプの強制変換する必要があります.