关于string::size_type
2015-09-07 13:55
288 查看
关于string::size_type
size_type其实是string模板类定义的一种类型之一,它与size_of的用法相似,只是它根据存储的类型返回字符串的长度.对于 string具体化,将根据char返回字符串的长度,在这种情况下,size_type与size_of等效.size_of是一种无符号类型. 你说的 size_type 其实就是 unsigned int 类型 其实并不正确,它要看其存储的类型.
size_type实际上是做为解决string类设计上的严重失误而引入的。
size_type是在string类内定义的一个无符号整形类型,由于string类里很多方法的返回值都是size_type类型的,所以必须使用size_type进行类型声明。
如下:
string a= "abcdefg ";
string::size_type idx;
idx = a.find( "h "); //not found,return string::npos
if( idx == string::npos ) //check if not find
{
.....
}
由于npos为find返回的特殊值(-1),而不幸的是,size_type类型为unsigned int,所以
不同的编译器对npos的理解不同。
试想一下,用8字节来unsigned int 来表示-1和用4字节表示,值是完全不同的。
这可能是string类设计时的一个致命缺陷,为了兼容和可移植性,
特定义size_type类型,在不同编译器中,size_type的解释也不同,这样就做到了可移植。
相关文章推荐
- Eclipse 不能finish android工程
- instancetype和id的异同
- VS2012 编译 Assimp
- (转)sizeof
- cell下载图片的思路 --无沙盒(内存)缓冲
- Java environment variables and their functionality
- update更新多行数据(oracle)
- C#使用ADO.Net部件来访问Access数据库的方法
- C++泛型算法
- 将字符串变量转换成临时表
- Java虚拟机(JVM)中的内存设置详解
- date与字符串互相转化
- PHP json_encode中文乱码解决方法
- Swift-边读边记-[0]
- CMarkupSTL 读写xml文件
- 知乎技术方案初探
- Ubuntu terminator 多窗口终端的快捷键
- c#、.net、asp.net、asp 、ado.net、.net framework的区别
- 2016美团 模拟题 去除首尾空格,内部多个空格变成一个空格
- AsyncTasks, Runnables, Handlers, and Threads, oh my!