关于string::size_type
2015-09-25 10:59
260 查看
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的解释也不同,这样就做到了可移植。
你说的 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的解释也不同,这样就做到了可移植。
相关文章推荐
- 被锐速加防火墙坑了一下。。。
- 简单的点击短信发送计时器
- 设计模式之工厂方法模式(代码用Objective-C展示)
- Android学习【5】自定义ArrayAdapter
- Python入门之(数字,set,动态类型)
- 手机串号模拟修改工具软件的使用教程
- 自动创建两个临时文件的函数,以及其创建的文件函数的默认属性
- 【软考】软考视频总结
- innoDB Crash Recovery 流程源码实现分析
- ViewPager 如何得到当前的Fragment (使用FragmentPagerAdapter)
- InnoDB Crash Recovery 流程源码实现分析
- Diamond详解(2)-分析
- android 四大组件之 BroadCastReceiver
- Terminal initialization failed; falling back to unsupported
- Spring Bean定义总结:配置文件手写Bean PK 组建扫描用注解
- iOS - NSLog的使用方法
- Java XML的总结(一)
- Ubuntu环境变量
- Web应用启动socket服务
- iOS 网络请求 重要