size_type与size_t的机器无关性
来源:互联网 发布:java list排序算法 编辑:程序博客网 时间:2024/05/19 17:23
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的机器无关性
- size_t 与size_type的使用。。。。。
- size_t 与size_type的使用
- size_t与size_type的区别
- size_t 与size_type的使用
- C++中size_t与size_type的小结
- size_type与size_t
- size_t 与size_type
- 关于size_t与size_type
- size_t与size_type
- c++: size_type与 size_t
- size_t与size_type辨析
- size_t 与 size_type
- size_type 和 size_t 的区别
- size_type 和 size_t 的区别
- size_type 和 size_t 的区别
- size_type 和 size_t 的区别
- size_type和size_t的区别
- if,switch,for循环语句
- ubuntu设置开机启动图形应用程序,替换默认图形桌面
- Qt - QTimer更新ui
- C++实现开机启动
- HDU 1082
- size_type与size_t的机器无关性
- poj 3320 Jessica's Reading Problem
- POJ 1006 Biorhythms
- LeetCode: Max Points on a Line
- 树链剖分-链的剖分(线段树维护+离线操作)
- 关于ios越狱开发的那些事
- 7518爱的是看了就关联方看见过开了房7518季后赛的规范健康
- 微软MSDN订阅介绍
- cmake函数参数解析