size()函数计算stirng类型长度的用法,注意返回值为size_type类型

       从逻辑上讲,size()成员函数似乎应该返回整型数值,但事实上,size操作返回的是string::size_type类型的值。我们需要对这种类型做一些探讨。

       string 类类型和许多其他库类型一样都定义了一些配套类型(companion type)。通过这些配套类型,库类型的使用就能与机器无关(machine-independent)。size_type就是这些配套类型中的一种。它定义为与unsigned(unsigned int 或 unsigned long)具有相同的含义,而且可以保证足够大能够存储任意string对象的长度。为了使用由string类型定义的size_type类型,程序员必须加上作用域操作符来说明所使用的 size_type类型是由 string类定义的。

      虽然我们不知道string::size_type的确切类型定义,但是可以指到它是unsigned型。对于任意一种给定的数据类型,它的unsigned 型所能表示的最大正整数比对应的signed 型要大一倍。比如 unsigned int 所表达的最大整数数值就为 signed int 型所能表示的最大整数的两倍,这是因为在unsigned int 中,最高位为符号位,表示这个数的正负,unsigned int为4字节,而表示这个数的数值的位数就只有剩下的15位了;对于unsigned int 来说,它也是一个4字节的,但是它的所有16为都用来表示这个数的数值大小,而且它只能表示正数。这个事实就表明,size_type存储的string长度是int所能存储的两倍。

     使用int来表示string类型长度还有另一个问题,有些机器上int变量的表示范围太小,甚至无法存储实际并不长的string对象。例如在有的机器上,int类型只有两字节,即16位大小,而16位能表示的最大正整数只有32767,如果我们把一个文件中的所有字符全部保存到一个string类型中,那么很可能就会超过这个最大长度。因此,为了避免溢出,保存一个string对象的size的最安全的方法就是使用标准类型库string::size_type。

     例如:

     #include<iostream>

     #include<string>

     using namespace std;

     int main()

     {

    string strTest("This is a string!");

扫描二维码关注公众号,回复: 6737556 查看本文章

    string::size_type length = strTest.size();

    cout<<"The size of strTest is: "<<length<<endl;

     }

转载于:https://www.cnblogs.com/hongfenglee/archive/2012/02/14/2350836.html

猜你喜欢

转载自blog.csdn.net/weixin_34061555/article/details/94102379