关于std::size_t
2013-09-28 10:57
225 查看
首先四种类型都是无符号类型,是用以表示元素个数或者数组索引的最佳类型。在作为函数参数时,不需像有符号类型那样检测值是否小于零。
1. ::size_t还是std::size_t
请使用std::size_t,因为你处于C++的世界。
在此,所有C++标准库组件用以表示元素个数的类型(比如size()或者operator[])都是std::size_t。
std::size_t count = array.size(); // array是typedef vector<int>
std::size_t index = 0;
array[ index ] = 0;
注意:
1. 如果某个CPP没有使用任何C++标准库组件,那么就有可能需要包含<cstddef> 头文件。
2. std::size_t其实就是::size_t (::size_t被引入到namespace std中(你可以在<cstring>中找到)
基本上我们不会考虑unsigned int和unsigned long,因为处在C++的世界,使用C++标准库组件就是在所难免了。
如果你非要了解其细枝末节的话,那么下面是一份清单:
unsigned int 和 unsigned long比较(不考虑32位以下的平台)
如果不考虑可移植性:
在32位平台上更应该使用unsigned int,因为它:
1. 和unsigned long 一样的大小,32位可以表示到42.9亿。
2. 比unsigned long更常用
3. 和std::size_t是一样的类型
如果是64位平台的话:
1. unsinged int仍是32位,而unsigned long就是64位了。
2. 更应该使用unsigned long因为处理器对64位具有更快的处理速度。
就目前而言,64位平台还不够成熟,所以向64位平台的移植基本不做考虑。
但是如果你坚持要考虑可移植性(注意是硬件32位平台向64位移植,而非软件):
1. 如果对速度敏感:使用unsigned long,无论在32位还是64位都有最快的处理速度。
2. 如果对内存敏感:使用unsigned int,使用内存量不会因平台而改变。
不过通常对于硬件平台的可移植性的考虑都是多余的(不够敏捷哦)。
总结:
请在任何情况下使用std::size_t
1. ::size_t还是std::size_t
请使用std::size_t,因为你处于C++的世界。
在此,所有C++标准库组件用以表示元素个数的类型(比如size()或者operator[])都是std::size_t。
std::size_t count = array.size(); // array是typedef vector<int>
std::size_t index = 0;
array[ index ] = 0;
注意:
1. 如果某个CPP没有使用任何C++标准库组件,那么就有可能需要包含<cstddef> 头文件。
2. std::size_t其实就是::size_t (::size_t被引入到namespace std中(你可以在<cstring>中找到)
基本上我们不会考虑unsigned int和unsigned long,因为处在C++的世界,使用C++标准库组件就是在所难免了。
如果你非要了解其细枝末节的话,那么下面是一份清单:
unsigned int 和 unsigned long比较(不考虑32位以下的平台)
如果不考虑可移植性:
在32位平台上更应该使用unsigned int,因为它:
1. 和unsigned long 一样的大小,32位可以表示到42.9亿。
2. 比unsigned long更常用
3. 和std::size_t是一样的类型
如果是64位平台的话:
1. unsinged int仍是32位,而unsigned long就是64位了。
2. 更应该使用unsigned long因为处理器对64位具有更快的处理速度。
就目前而言,64位平台还不够成熟,所以向64位平台的移植基本不做考虑。
但是如果你坚持要考虑可移植性(注意是硬件32位平台向64位移植,而非软件):
1. 如果对速度敏感:使用unsigned long,无论在32位还是64位都有最快的处理速度。
2. 如果对内存敏感:使用unsigned int,使用内存量不会因平台而改变。
不过通常对于硬件平台的可移植性的考虑都是多余的(不够敏捷哦)。
总结:
请在任何情况下使用std::size_t
相关文章推荐
- 关于std::string.length() std::string.size()
- [转]关于 SetProcessWorkingSetSize 和内存释放
- 关于stdClass
- 关于vector.size()和string.length() 的返回类型 size_type
- 关于http客户端常见错误"警告:Going to buffer response body of large or unknown size. Using getResponseBodyAsStream instead is recommended.
- 关于 Cocos2d-x 中使用 setFrameSize 后 MenuItem 失效
- 关于std::bind绑定栈变量对象的思考
- 关于ubuntu 是否需要使用std::到问题。
- 关于 std::sort 自定义 比较函数 是 debug模式下报 invalid operator< 警告
- 关于 TCP window size
- tomcat的内存配置,关于-Xms -Xmx -XX:PermSize -XX:MaxPermSize的理解和区别
- 一段关于c++11中lambda表达式和std::function的体验代码
- 关于std::map中的find和[]的问题
- 关于存储过程传出值"String[2]: Size 属性具有无效大小值 0,” 错误
- std::string 的length()与size()方法没有区别
- 关于标准库中std::make_pair的一个问题
- 【C++错误处理】VC6中关于bool __cdecl std::isdigit(_E,const class std::locale &)' : expects 2 arguments
- 关于 查看文件的size
- 关于“using namespace std”
- 【转】关于“using namespace std”