环境:win7+vs2012, 代码如下:
#include <iostream>
void func(int &n)
{
n = 10;
}
int main(int argc, char *argv[])
{
size_t n ;
func((int&)n);
std::cout << std::hex << n << std::endl;
system("pause");
return 0;
}
我们知道size_t在win32下是4个字节,在x64下是8个字节。
在win32下这样写是没什么问题的;
但是在x64下得到的结果是:0xcccccccc0000000a
然后我们再把:
size_t n;
改为:
size_t n = 0;
运行下结果又对了。
原因是size_t n默认将其初始化为0xcccccccccccccccc
赋值的时候只将低位的4个字节赋值所以得到0xcccccccc0000000a
所以在使用size_t与其他类型转型的时候一定要注意了,千万不要这样写!!!