在写程序的过程中我们可能包含一些头文件,这些头文件里可能会定义一些东西,如果我们不小心忘记了某个头文件中定义过什么,就有可能在当前文件中重新定义一下,如果前后定义一致当然不会产生什么问题,可是如果前后定义不一致呢?请看下面的例子:
#include <iostream>
using namespace std;
typedef int L; //可能定义在其他头文件中,然后被包含到此文件中
class A {
public:
void mumble(L l) {
cout<<sizeof(l)<<'\t'<<sizeof(_val)<<endl;
_val = l;
cout<<_val<<endl;
}
private:
typedef unsigned short L;
L _val;
};
int main(){
A a;
a.mumble(-1);
return 0;
}
程序的运行结果如下:
这里的问题发生在解析成员函数 mumble () 的时候,可以看到:形参的类型被解析成 int 型,而成员变量 _val 的类型被解析成unsigned short 型,因此二者的类型是不同的,对数据的表示形式和范围也是不同的,所以导致我们在 main 函数里给 mumble () 传入 -1,而实际赋值给 _val的值为 65535.