转载自: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;
}
加载中,请稍候......