社区
C++ 语言
帖子详情
string::size_type
heaven33
2009-07-23 09:49:49
看c++ primer 讲string 类的时候 说 string的 size()方法返回的是string::size_type类型,说这是一些配套类型,通过这些配套类型,库类型的使用就能与机器无关。
请问为什么与机器无关呢? 对这句话不是很了解,高手给解释一下吧。
...全文
622
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楼说的,与实际机器匹配的意思。
JavaSE基础视频精讲⑫:
String
,
String
Builder和
String
Buffer
本课程适用于零基础小白快速入门Java语言技术,通过课程学习可以清晰了解Java
String
,
String
Builder和
String
Buffer。课程配套完整的(笔记+代码+作业)
【c++】
string
::
size
_
type
string
::
size
_
type
在C++标准库类型
string
,在调用
size
函数求解
string
对象时,返回值为
size
_
type
类型,一种类似于unsigned类型的int 数据。可以理解为一个与unsigned含义相同,且能足够大能存储任意
string
的类型...
C++学习(三)std::
string
::
size
_
type
由
string
类类型和vector类类型定义的类型,用以保存任意
string
对象或vector对象的长度,标准库类型将
size
_
type
定义为unsigned类型
string
抽象意义是字符串,
size
()的抽象意义是字符串的尺寸,
string
::
size
_
type
...
c++
string
::
size
_
type
详解
c++
string
::
size
_
type
详解
string
::
size
_
type
类型 从逻辑上来讲,
size
()成员函数似乎应该返回整型数值,或如2.2节“建议”中所述的无符号整数。但事实上,
size
操作返回的是
string
::
size
_
type
类型的值。...
C++ 学习
string
::
size
_
type
第二次看C++ Primer,看到
string
类型的时候,再一次注意到了
string
::
size
_
type
; 自己最早编写C++的时候,因为刚看过书,所以还比较注意,不把
size
_
type
和int混用,但是慢慢的,看过不少人编写的程序都是直接将
size
_...
C++ 语言
64,646
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章