加载中…
个人资料
康文
康文
  • 博客等级:
  • 博客积分:0
  • 博客访问:1,116
  • 关注人气:52
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

string类的size与length的区别

(2011-04-03 22:34:56)
标签:

size和length

it

分类: C语言

转载自:http://hi.baidu.com/xzd2005/blog/item/be692d245dcd75114c088da4.html

 

(一)

    二者在功能上没有区别。
    basic_string <> 有双重身份,一是代替传统的C字符串,所以应该针对C中的strlen,给出相应的函数length()。另一个身份是可以用作STL容器,所以要按照STL容器的惯例给出size()。basic_string就是一个

能够根据需要自动调整内存分配的对象容器。可以说是一个动态数组。
    这个数组中的元素是同一类型。stl中已经定义好了两个类型string和wstring:
    @ typedef basic_string<char, char_traits<char>, allocator<char> >   string;
    @ typedef basic_string<wchar_t, char_traits<wchar_t>,allocator<wchar_t> > wstring;

 

(二)
#include <string>
#include <iostream>

using namespace std;

int main()
{
    string   str= "123456789";
    cout << "size: " << str.size() << endl;       // 9
    cout << "length: " << str.length() << endl;   // 9

    cout << str.size << endl;                     // 注意1:输出为1
    cout << str.length << endl;                   // 注意2:输出为1
    return 0;
}

    注意1和注意2:发生了奇异的转型,把指向成员函数的指针 string::size_type (string::*)() 转成了bool,从而调用 ostream& operator < <(ostream&, bool) 这肯定是设计者没想到的。

 

(三)
试试下面的程序,打印的结果是 "true ",证明了上述结论:

int main()
{
    string   str= "123456789";
    cout << "size: " << str.size() << endl;
    cout << "length: " << str.length() << endl;
    cout<<boolalpha;           // 用符号形式表示真假
    cout <<str.size<<endl;
    cout <<str.length<<endl;
    return 0;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有