码迷,mamicode.com
首页 > 其他好文 > 详细

size_type与size_t的机器无关性

时间:2014-08-05 03:06:18      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:size_type   size_t   平台无关   

1、首先说下这两者之间的区别:sizetype是容器定义的类型,其使用范围在容器内,即命名空间在容器内,如STL中string类有定义string::size_type类型,vector内同样定义有vector<int>:size_type类型,它们的定义并不重复,命名空间不同罢了。而size_t类型的命名空间是全局的命名空间,全局只有一个,不能再次重复定义。

2、那么它们是什么类型呢?

      答案是不唯一的,或者说是不确定的。在win32平台下它们的定义都是unsigned int类型,在win64平台下它们的定义是unsigned long类型

3、stl为什么定义这两种类型?

     在我看来,这里有两个理由:

     (1)定义新的类型名字,一目了然,开发人员在使用容器或者需要记录其它长度或者下标值时,用这种类型的话一目了然,其它同组开发人员也可以很容易读懂其编写的代码,这就增加了程序的易读性。

     (2)上面的原因很重要,但这并不是其定义新类型的根本原因,STL定义新类型是为了实现平台的无关性,即让开发人员写出的代码具有平台无关性,可以任意在其它平台上面移植而不会出现意想不到的错误或异常。


对于上面的第二个原因有很多的同学理解的并不透彻,下面我们就看一个百度百科里提到的很简单的例子:

#include <iostream>
#include <string>

using namespace std;

int main(){

      string s; 
      intrc = s.find(/*.....*/);

      system("pause"); 
      return 0;

}

这样的代码在一般情况下是不会出问题的,因为大多数的开发都在32位平台下开发,对应的int和s.find()返回值类型相同,都是32位int类型,但是加入把上面程序放在win64平台运行的话就会出现意想不到的效果。程序很可能会崩溃。s.find()返回值为64位的unsigned long类型,显然程序有问题了。

为了避免这种情况我们应该使用统一的类型,在win32下rc应该是32位整形,在win64下rc应该是64位整形。因此rc类型应该随平台的改变而改变。这就明显需要我们定义该类型为size_t类型啦。明白了吗?





size_type与size_t的机器无关性,布布扣,bubuko.com

size_type与size_t的机器无关性

标签:size_type   size_t   平台无关   

原文地址:http://blog.csdn.net/wanzaixiaoxinjiayou/article/details/38377591

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!