string::size_type注意
2016-08-08 11:28
387 查看
关于string::size_type
size_type其实是string模板类定义的一种类型之一,它与size_of的用法相似,只是它根据存储的类型返回字符串的长度.对于 string具体化,将根据char返回字符串的长度,在这种情况下,size_type与size_of等效.size_of是一种无符号类型. 你说的 size_type 其实就是 unsigned int 类型 其实并不正确,它要看其存储的类型.
size_type实际上是做为解决string类设计上的严重失误而引入的。
size_type是在string类内定义的一个无符号整形类型,由于string类里很多方法的返回值都是size_type类型的,所以必须使用size_type进行类型声明。
如下:
string a= "abcdefg ";
string::size_type idx;
idx = a.find( "h "); //not found,return string::npos
if( idx == string::npos ) //check if not find
{
.....
}
由于npos为find返回的特殊值(-1),而不幸的是,size_type类型为unsigned int,所以
不同的编译器对npos的理解不同。
试想一下,用8字节来unsigned int 来表示-1和用4字节表示,值是完全不同的。
这可能是string类设计时的一个致命缺陷,为了兼容和可移植性,
特定义size_type类型,在不同编译器中,size_type的解释也不同,这样就做到了可移植。
以上内容可见
STL:11.2.12节。
相关文章推荐
- size()函数计算stirng类型长度的用法,注意返回值为size_type类型
- 关于string::size_type
- 【C++注意事项】6 Library string Type
- string::size_type类型
- string::size_type 的理解
- 关于vector.size()和string.length() 的返回类型 size_type
- string::size_type
- 【C++注意事项】6 Library string Type
- 为什么是string::size_type而不是int?---顺便聊聊无符号数和负数的比较
- string::size_type类型
- string::size_type类型
- string::size_type和string::size_t和unsigned
- std::vector<std::string>::size_type和 int的区别
- C++ 中string::size_type相关问题
- string::size_type 用的不错
- std::string的find返回值为string::size_type
- 3. std::string::size_type
- 【温故知新C/C++】02:string::size_type ||vector
- string对象的操作 string::size_type类型
- No size set for variable length data type: String