size_type
2017-11-09 23:54
204 查看
size_type是在STL的string类和vector类中定义的类型,用以保存任意string对象或vector对象的长度,size_type的抽象意义是尺寸单位类型。
size_type实质上是无符号整型,但其长度不是固定的,它可以是unsigned int,也可以是unsigned long甚至是unsigned long long。简单来说,size_type足够存放下任何string对象或vector对象的大小,这依机器环境以及编译器的环境不同而不同,这么做是为了增强兼容性和可移植性。
很多程序员不了解string类和vector类,常将size()成员函数返回的size_type赋值给int型变量,这是很严重的错误。试想一下,如果你使用的平台的size_type类型的长度是32位的,正好与int类型匹配,那么你会侥幸通过。但如果放到一台size_type是64位长度的机器中,32位的int就放不下了。另外,由于size_type是无符号整型,因此如果在表达式中混用了带符号数和无符号数将可能产生意想不到的结果。例如,假设n是负值的int型,对一个string对象s,则表达式s.size()
< n 的判断结果几乎肯定是true,因为负值n会自动转换成一个比较大的无符号值。
如果我们想获取自己使用的机器中size_type的最大值,可以通过下面的程序来得到:
#include <iostream>
#include <string>
int main (void)
{
std::cout << std::numeric_limits<std::string::size_type>::max() << std::endl;
return 0;
}
C++的很多库都定义了一些配套类型,通过这些配套类型,类库的使用就可以与机器无关,大大增强了代码的可移植性。size_type就是这样的配套类型。
本文部分内容摘自《C++ Primer(第5版)》
size_type实质上是无符号整型,但其长度不是固定的,它可以是unsigned int,也可以是unsigned long甚至是unsigned long long。简单来说,size_type足够存放下任何string对象或vector对象的大小,这依机器环境以及编译器的环境不同而不同,这么做是为了增强兼容性和可移植性。
很多程序员不了解string类和vector类,常将size()成员函数返回的size_type赋值给int型变量,这是很严重的错误。试想一下,如果你使用的平台的size_type类型的长度是32位的,正好与int类型匹配,那么你会侥幸通过。但如果放到一台size_type是64位长度的机器中,32位的int就放不下了。另外,由于size_type是无符号整型,因此如果在表达式中混用了带符号数和无符号数将可能产生意想不到的结果。例如,假设n是负值的int型,对一个string对象s,则表达式s.size()
< n 的判断结果几乎肯定是true,因为负值n会自动转换成一个比较大的无符号值。
如果我们想获取自己使用的机器中size_type的最大值,可以通过下面的程序来得到:
#include <iostream>
#include <string>
int main (void)
{
std::cout << std::numeric_limits<std::string::size_type>::max() << std::endl;
return 0;
}
C++的很多库都定义了一些配套类型,通过这些配套类型,类库的使用就可以与机器无关,大大增强了代码的可移植性。size_type就是这样的配套类型。
本文部分内容摘自《C++ Primer(第5版)》
相关文章推荐
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);
- C++ vector<int>::size_type的使用
- string::size_type注意
- size_t、size_type、int
- Type与Size
- “error: unknown type name 'size_t'” solved while compiling with llvm-gcc
- C++ string::size_type类型
- size_type和size_t的区别
- string::size_type类型
- Parameter \' \': No size set for variable length data type: String
- specified class size for type `CatType' is smaller than the parent type's `GObject
- size_t和size_type 的区别 什么时候用哪个?
- size_t 和 size_type的区别
- QTerro:Size mismatch for type ‘QPaintBufferCacheEntry’ [1024]. Previously registered size 0
- 【c++】size_t 和 size_type的区别
- c++中size_t和size_type之间的关系
- C++——size_t 和 size_type的区别
- Python Numpy ValueError: data type must provide an itemsize
- Parameter 'p_REMARK': No size set for variable length data type: String.
- 微软企业库中数据库访问代码问题(System.InvalidOperationException: Parameter '@FileContent' exceeds the size limit for the sql_variant datatype.)