size_type 和 size_t 的区别
来源:互联网 发布:软件稳定性测试方案 编辑:程序博客网 时间:2024/06/02 19:05
string st("The expense of spirit\n");cout << "The size of "<<st<<"is"<<st.size()<< "characters, including the newline"<<endl;
那么size()这个函数返回的类型? 一定要记住,绝对不是整形,而是size_type类型的,所以千万不要把size的返回值赋给一个int变量。
那么size_type到底是一种什么样的类型呢?
string类类型和许多其他库类型都定义了一些配套类型(companion type)。
通过这些配套类型,库类型的使用就能与机器无关。size_type就是这些配套类型中的一种。
size_type被定义为与unsigned型(unsigned int, unsigned long)具有相同的含义,而且可以保证足够大能够存储任意string对象的长度。为而来使用由string类型定义的size_type类型。程序员必须加上作用于操作符来说明所使用的size_type类型是由string类定义的。
我们为什么不适用int变量来保存string的size呢?
使用int变量的问题是:有些机器上的int变量的表示范围太小,甚至无法存储实际并不长的string对象。如在有16位int型的机器上,int类型变量最大只能表示32767个字符的string对象。而能容纳一个文件内容的string对象轻易就能超过这个数字,因此,为了避免溢出,保存一个string对象的size的最安全的方法就是使用标准库类型string::size_type().
一点注意:虽然是在学习标准库string的时候巧遇了size_type类型,但是,其实vector库也可以定义size_type类型,在vector库中还有一个difference_type类型,该类型用来存储任何两个迭代器对象间的距离,所以是signed类型的。
什么是size_t类型呢?其实本质上和size_type没有多大区别
其实size_t和size_type类似,size_t类型定义在cstddef头文件中,该文件是C标准库的头文件stddef.h的C++版本.它是一个与机器相关的unsigned类型,其大小足以保证存储内存中对象的大小。用法如下:
bitset<32> bitvec;
size_t sz=bitvec.size();
另外sizeof操作符的返回值的类型也为size_t
转自:
http://hi.baidu.com/cchuncoder/item/da20dfbd706069442aebe382
- size_type 和 size_t 的区别
- size_type 和 size_t 的区别
- size_type 和 size_t 的区别
- size_type 和 size_t 的区别
- size_type和size_t的区别
- size_t 和 size_type的区别
- c++中size_t和size_type的区别
- 【c++】size_t 和 size_type的区别
- C++ size_t 和size_type的区别
- 【c++】size_t 和 size_type的区别
- 【c++】size_t 和 size_type的区别
- size_t,size_type,ptrdiff_t的区别
- size_t与size_type的区别
- size_type和size_t的总结
- size_type和size_t的总结
- C语言中size_t和size_type 的区别
- c++中size_type和size_t的关系
- 【c/c++】size_t和size_type的差别
- 共享内存-新学习
- linux 较好的网站资料
- sql基本查询语言课件
- PXE + kickstart 通过CentOS6.2 安装 ubuntu12.04
- Using the LND tool to analyze IBM Lotus Notes and Domino hangs and crashes
- size_type 和 size_t 的区别
- Creating mailbox file:文件已存在解决办法
- IAR开发嵌入式应用程序(基于系统的)
- 微博营销技巧之软文写作
- 局部变量,全局变量,成员变量,实例变量,类变量的区别
- Android Bitmap 与 Drawable之间的转换
- Javascript匿名函数解读
- 排序算法的数组实现 -- 插入排序(一)
- 枚举目录下的目录和文件CFileFind