| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1087 人关注过本帖
标题:求指教,求鞭笞,关于string::size_type;
只看楼主 加入收藏
peach5460
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:武汉
等 级:贵宾
威 望:30
帖 子:2780
专家分:6060
注 册:2008-1-28
收藏
得分:3 
size_type可以简单理解成uint

我总觉得授人以鱼不如授人以渔...
可是总有些SB叫嚣着:要么给代码给答案,要么滚蛋...
虽然我知道不要跟SB一般见识,但是我真的没修炼到宠辱不惊...
2013-01-14 12:41
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
在,在网上又找了半天,也没明白啊

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-14 12:50
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:3 
回复 楼主 yaobao
string::size_type确实是类类型,但它与unsigned int兼容,可以比较。

授人以渔,不授人以鱼。
2013-01-14 12:57
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
以下是引用TonyDeng在2013-1-14 12:57:12的发言:

string::size_type确实是类类型,但它与unsigned int兼容,可以比较。
困扰我3个小时的问题竟然是因为兼容问题,苦啊!!
可是T版,这个兼容是谁兼容谁啊,是string::size_type兼容unsigned int  还是unsigned int 兼容string::size_type,或者是相互兼容;再有就是这个兼容是因为string::size_type是unsigned int的define还是别的原因啊

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-14 13:05
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
size_type是在类中定义的类型,可以视为define,但其实没那么简单,不过可以简单地这样看。之所以要在类中定义,是因为这个东西需要随着类的实际情况变化而变化,这个计数器可能是极小的数,也可能是极大的数,简单地一个unsigned int可能容纳不下,所以它会随着定义的类的可能性而变化,不过不管它是unsigned int还是unsigned long甚至更大,都必然与unsigned类整数兼容,与零比较是没有问题。

授人以渔,不授人以鱼。
2013-01-14 13:16
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你自己4楼贴的东西就叙述得很清楚了

授人以渔,不授人以鱼。
2013-01-14 13:21
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
以下是引用TonyDeng在2013-1-14 13:16:28的发言:

size_type是在类中定义的类型,可以视为define,但其实没那么简单,不过可以简单地这样看。之所以要在类中定义,是因为这个东西需要随着类的实际情况变化而变化,这个计数器可能是极小的数,也可能是极大的数,简单地一个unsigned int可能容纳不下,所以它会随着定义的类的可能性而变化,不过不管它是unsigned int还是unsigned long甚至更大,都必然与unsigned类整数兼容,与零比较是没有问题。
我这样理解不知道对不对:之所以if(s.size()==0)这样的操作正确是因为无符号数字0的特殊位模式造成的,因为不管是考虑大小端还是字节数,无符号的0都是所有位上都是0,所以可以不考虑s.size()的返回值size_type到底是unsigned in 还是unsigned long 或是其他别的什么类型而直接比较,如果将0换成别的数是不可以的
说来惭愧,C++刚学,想自己写段代码来验证这样理解对不对都很难办到,即使有了结果自己也不敢相信是对的。
求指教

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-14 13:31
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
对的。类定义之所以把size_type定义为static,让外部可以使用string::size_type类型,就是让你直接使用,故不要把这个值赋值给int类型,那样编译器可能会报类型不兼容(熟悉C的人可能会通过强制转换操作,但C++很反对这种做法)。在编程时,外部定义要接收这个数据的变量,直接使用相应类的::size_type是最好的。

授人以渔,不授人以鱼。
2013-01-14 13:37
yaobao
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:蒙面侠
威 望:4
帖 子:1854
专家分:4121
注 册:2012-10-25
收藏
得分:0 
unsigned  int i;
string st("abcderty");


i=st.size();
//第一种,赋值
i=5;
if(i>st.size())
\\第二种,比较
i+=st.size();
//第三种,运算
那上面这三种都是错误的喽

认认真真的学习,踏踏实实的走路:戒骄戒躁!!!
2013-01-14 13:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
是的,你上机测试一下就知道了么。

授人以渔,不授人以鱼。
2013-01-14 13:52
快速回复:求指教,求鞭笞,关于string::size_type;
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018097 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved