c++ 小心 size_t 的一个陷阱

typedef unsigned int size_t;

 

size_t 其实是一个无符号的int;

 

在对于数组的循环中, 貌似很有用,  因为数组的下标都是 0, 1, 2......, 不可能是负数.

 

下面是这个陷阱的示范:

 

    int limit = -1;

 

    for(size_t i=0; i < limit; ++i){
               cout << i << endl;
    }

 

这段代码里面的循环体貌似不会被执行, 因为 0 > -1 , 实际是这样吗? NO, 你只会看到屏幕中的数字拼命冒出!

 

原因就在于 i < limit 这里, 这个limit 的类型已经不是int 了, 而是被隐式转换为 unsigned int.

 

i < (unsigned int)limit,

 

看看 cout << (size_t)-1 << endl;

 

在我的电脑上是显示 4294967295 .    哈哈, 示范中的循环次数太恐怖了!

 

如果用 size_t, limit 这类的变量最好做一下判断, 或者用int.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值