size_t 的陷阱

来源:互联网 发布:固定资产系统源码 编辑:程序博客网 时间:2024/04/30 09:14

size_t是无符号整形,平常用的时候没有觉得有什么问题,但是今天的一个程序怎么弄就是不对,反复检查逻辑错误并没有发现有什么错误,而且程序本身逻辑并不复杂,搞得我头很大。后来经过一番探索,终于发现其错误发生在size_t上。废话不多说,直接给代码。

 

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4.     size_t t = 1;
  5.     int z = -1;
  6.     if(z < t) {
  7.         cout << "i'm in" << endl;
  8.     }
  9.     cin.get();
  10. }

t是size_t类型的,按照道理说这个if条件判断肯定是能进去的,但是因为size_t类型是无符号,int型是有符号,结果就很妖怪的没有进入if里面。结果你会发现,编译器把有符号的z转换成了无符号的z,也就变成了4294967295,这样一来if条件能判断为true才怪!

原创粉丝点击