您的位置:首页 > 其它

unsigned, unsinged int,unsigned long,std::size_t说明

2012-02-17 20:32 405 查看
【转自】http://www.cppblog.com/deane/articles/113724.html

首先四种类型都是无符号类型,是用以表示元素个数或者数组索引的最佳类型。在作为函数参数时,不需像有符号类型那样检测值是否小于零。

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>中找到)

2.基本上我们不会考虑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,使用内存量不会因平台而改变。

不过通常对于硬件平台的可移植性的考虑都是多余的(不够敏捷哦)。

3. 关于unsigned类型:

有时候会碰到一些C语言的函数,它的参数类型是unsigned,而不是unsigned int、unsigned long之类的,例如:Turbo C的库函数中有这么几个函数:unsigned far setgraphbufsize(unsigned bufsize);int read(int handle, void *buf, unsigned len); int write(int handle, void *buf, unsigned len);

[摘引他人]这种情况一般都会在前面进行宏定义的

是为了版本兼容或跨平台

现在的32位变成64位的机器 这样的定义有必要



#ifdef WINDOWS

define unsigned (unsigned int)

#endif

ifdef LINUX

define unsigned (unsigned long)

#endif

这样的话在跨平台的时候就很有必要了

CHECK:个人经查阅VC6系统头文件,并未发现上面的宏定义;同时结合一些函数(如_beginthreadex)查阅MSDN,判断unsigned在32位系统下就代表unsigned int,毕竟这是系统最常用的类型。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐