建议2-4:禁止把size_t类型和它所代表的真实类型混用

我们知道,size_t类型代表的是一种无符号整数类型,现在有这样一个问题:既然size_t类型是一种无符号整数类型,那么它是否可以直接与它所代表的真实实际类型混合使用呢?带着这个问题,我们来看下面这段代码:


unsigned int x;
size_t y;
x = y;

在上面的代码中,变量x被声明为unsigned int类型(即无符号整数类型),变量y虽然被声明为size_t类型,但它同样是一种无符号整数类型。因此,从表面上看,语句“x=y”完全是可行的,但实际情况并非如此。

上面已经阐述过,size_t类型在不同的平台上很可能代表的是unsigned int、unsigned long int或者unsigned long long int类型。当代表unsigned int类型时,执行语句“x=y”不会出现什么问题;但如果代表的是unsigned long int或unsigned long long int类型,那么执行语句“x=y”时,就可能把y的高位给截掉,从而导致结果出错。因此,我们千万不能在程序中混用size_t类型和它所代表的真实类型,这一点一定要注意。