社区
C++ 语言
帖子详情
string::size_type
heaven33
2009-07-23 09:49:49
看c++ primer 讲string 类的时候 说 string的 size()方法返回的是string::size_type类型,说这是一些配套类型,通过这些配套类型,库类型的使用就能与机器无关。
请问为什么与机器无关呢? 对这句话不是很了解,高手给解释一下吧。
...全文
652
15
打赏
收藏
string::size_type
看c++ primer 讲string 类的时候 说 string的 size()方法返回的是string::size_type类型,说这是一些配套类型,通过这些配套类型,库类型的使用就能与机器无关。 请问为什么与机器无关呢? 对这句话不是很了解,高手给解释一下吧。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
njnuxj
2010-03-03
打赏
举报
回复
学习了,领教了,呵呵
yjpa7
2009-12-20
打赏
举报
回复
学习了,谢谢
大牛~Daniel
2009-07-23
打赏
举报
回复
[Quote=引用 1 楼 yyyapple 的回复:]
使用库是在相对于不同的机器环境来说更高一级的抽象
string抽象意义是字符串,
size()的抽象意义是字符串的尺寸,
string::size_type抽象意义是尺寸单位内型
不管实际机器存储类型是什么样的,size_type在底层的实现始终都可以与实际机器匹配,用户在使用时只需要关注其抽象意义,而不用理会更底层的细节,所以与机器无关
[/Quote]
同意1楼
简单讲就是用软实现,打个比方:假如你用的是32位机,int是4个字节,现在有另一台机是64位的,int是8个字节(我是说假如),这就是与机器有关;但是我为了保持兼容性,不想int变为8字节,那怎么办呢?那我可以用程序来实现,我定义一种类型或函数使得int不管在32位机还是64位机上都是4字节。这样就是与机器无关咯。
wwwzyb2002
2009-07-23
打赏
举报
回复
学习下
herman~~
2009-07-23
打赏
举报
回复
学习
yangyunzhao
2009-07-23
打赏
举报
回复
这个得从c++标准说起了。
当时委员会的那帮人定义short int long等的时候,并没有规定int一定是4字节。也就是说int类型在这台机器上的表示范围可能与另外一台机器不一样。这会造成代码不可移植。
后来在制定c++标准的时候,引入stl。就定义了一套任何平台都必须一样的类型,比如你这个string::size_type。至于它的具体实现,应该说很简单。
打个比方啊:它可以先sizeof int一下,根据结果,然后#define string::size_type int或long。
这样你写的代码就稍微具有一个点点可移植性了。
[Quote=引用楼主 heaven33 的回复:]
看c++ primer 讲string 类的时候 说 string的 size()方法返回的是string::size_type类型,说这是一些配套类型,通过这些配套类型,库类型的使用就能与机器无关。
请问为什么与机器无关呢? 对这句话不是很了解,高手给解释一下吧。
[/Quote]
LeonTown
2009-07-23
打赏
举报
回复
[Quote=引用楼主 heaven33 的回复:]
看c++ primer 讲string 类的时候 说 string的 size()方法返回的是string::size_type类型,说这是一些配套类型,通过这些配套类型,库类型的使用就能与机器无关。
请问为什么与机器无关呢? 对这句话不是很了解,高手给解释一下吧。
[/Quote]
这个似乎有些类似于,微软定义的某些类型。
例如:WORD等;
就是,保证这些类型,在不同位数的机器上,都有同样的位长。
pengzhixi
2009-07-23
打赏
举报
回复
你去看下 size_type的具体定义就知道了。
taodm
2009-07-23
打赏
举报
回复
楼主啊,你得先回答,如果不返回size_type,那么你认为该返回什么?
yyyapple
2009-07-23
打赏
举报
回复
使用库是在相对于不同的机器环境来说更高一级的抽象
string抽象意义是字符串,
size()的抽象意义是字符串的尺寸,
string::size_type抽象意义是尺寸单位内型
不管实际机器存储类型是什么样的,size_type在底层的实现始终都可以与实际机器匹配,用户在使用时只需要关注其抽象意义,而不用理会更底层的细节,所以与机器无关
nwpulei
2009-07-23
打赏
举报
回复
学习
yangshun2008
2009-07-23
打赏
举报
回复
[Quote=引用 10 楼 billow_zhang 的回复:]
另外,string::size_type从本质上来说,是一个整型数。关键是由于机器的环境,它的长度有可能不同。
例如:我们在使用 string::find的函数的时候,它返回的类型就是 string::size_type类型。而当find找不到所要找的字符的时候,它返回的是 npos的值,这个值是与size_type相关的。假如,你是用
string s;
int rc = s.find(.....);
然后判断,if ( rc == string::npos ) 这样在不同的机器平台上表现就不一样了。如果,你的平台的string::size_type的长度正好和int相匹配,那么这个判断会侥幸正确。但换成另外的平台,有可能 string::size_type的类型是64位长度的,那么判断就完全不正确了。
所以,正确的应该是:
string::size_type rc = s.find(.....);
这个时候使用 if ( rc == string::npos )就回正确了。
这样解释,是不是你应该更理解与机器无关的意思啊?!
[/Quote]学习了
liuwg9999
2009-07-23
打赏
举报
回复
同意
[Quote=引用 9 楼 billow_zhang 的回复:]
1楼的解释是正确的。但是8楼的PenglueR朋友接着又添加的评论就不太对了。一般定义的int32_t这样的类型从名字上看来,就是固定的32位的整型数。如果8楼的朋友用来评论这个,倒是正确的。
而string::size_type并非如此。它在不同的机器上,长度是可以不同的,并非固定的长度。但只要你使用了这个类型,就使得你的程序适合这个机器。这就是1楼说的,与实际机器匹配的意思。
[/Quote]
billow_zhang
2009-07-23
打赏
举报
回复
另外,string::size_type从本质上来说,是一个整型数。关键是由于机器的环境,它的长度有可能不同。
例如:我们在使用 string::find的函数的时候,它返回的类型就是 string::size_type类型。而当find找不到所要找的字符的时候,它返回的是 npos的值,这个值是与size_type相关的。假如,你是用
string s;
int rc = s.find(.....);
然后判断,if ( rc == string::npos ) 这样在不同的机器平台上表现就不一样了。如果,你的平台的string::size_type的长度正好和int相匹配,那么这个判断会侥幸正确。但换成另外的平台,有可能 string::size_type的类型是64位长度的,那么判断就完全不正确了。
所以,正确的应该是:
string::size_type rc = s.find(.....);
这个时候使用 if ( rc == string::npos )就回正确了。
这样解释,是不是你应该更理解与机器无关的意思啊?!
billow_zhang
2009-07-23
打赏
举报
回复
1楼的解释是正确的。但是8楼的PenglueR朋友接着又添加的评论就不太对了。一般定义的int32_t这样的类型从名字上看来,就是固定的32位的整型数。如果8楼的朋友用来评论这个,倒是正确的。
而string::size_type并非如此。它在不同的机器上,长度是可以不同的,并非固定的长度。但只要你使用了这个类型,就使得你的程序适合这个机器。这就是1楼说的,与实际机器匹配的意思。
string
::
size
_
type
类型
本文详细解释了
string
::
size
_
type
类型的作用与应用场景,探讨了其与int类型的区别,并对比了
size
_t与
size
_
type
的不同之处。
string
中
size
()的误解——
string
::
size
_
type
类型
string
::
size
()返回
string
::
size
_
type
类型,该类型为无符号整型,确保能容纳任意
string
长度。它是标准库定义的配套类型,体现机器无关性。C++11支持auto/decl
type
自动推导该类型,避免与int混用导致的符号转换问题。
c++
string
::
size
_
type
详解
本文解析了C++中
string
::
size
_
type
类型的含义及其重要性,强调了使用该类型存储
string
对象长度的原因,避免因类型不匹配导致的数据溢出问题。
C++学习(三)std::
string
::
size
_
type
本文介绍了
size
_
type
这一容器概念,它由
string
和vector类类型定义,用于保存对象长度。
string
::
size
_
type
本质是整型数,在不同机器上长度可能不同。还通过
string
::find函数举例,说明使用该类型可使程序适配不同机器,同时提到了字符数量与下标索引的关系。
关于
string
::
size
_
type
本文详细解释了C++中
string
::
size
_
type
的概念及其在
string
::find()函数中的应用。介绍了
size
_
type
作为无符号整型在不同平台上的表现,并强调了在循环及条件判断中正确使用的重要性。
C++ 语言
65,211
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章