看下面这个类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\n", f);//输出3  
  10.     printf("$d\n", (int)f);//输出5  
  11.     return 0;  

        不难看出,<<的调用将第二个参数强制转换为int,但是printf的%d只是读取了后面参数的前32位,解析成为int。如果需要用printf并且调用类的强制转换方法,需要显式的将对象进行类型的强制转换。