看下面这个类Fun ,其中包括了构造函数和类型强制转换函数。
- class Fun
- {
- int x;
- public:
- Fun(){x = 3;}
- operator int(){ return 5;}
- };
运行下面的程序
- #include <iostream>
- #include <cstdio>
- #include "fun.h"
- using namespace std;
- int main()
- {
- Fun f;
- cout << f << endl;//输出5
- printf("%d\n", f);//输出3
- printf("$d\n", (int)f);//输出5
- return 0;
- }
不难看出,<<的调用将第二个参数强制转换为int,但是printf的%d只是读取了后面参数的前32位,解析成为int。如果需要用printf并且调用类的强制转换方法,需要显式的将对象进行类型的强制转换。