C++ Traps之名称绑定

在写程序的过程中我们可能包含一些头文件,这些头文件里可能会定义一些东西,如果我们不小心忘记了某个头文件中定义过什么,就有可能在当前文件中重新定义一下,如果前后定义一致当然不会产生什么问题,可是如果前后定义不一致呢?请看下面的例子:


#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.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值