zoukankan      html  css  js  c++  java
  • unsinged int,unsigned long,size_t还是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

    转自:  http://www.cppblog.com/bidepan2023/archive/2008/01/22/41622.html 

  • 相关阅读:
    [BZOJ1666][Usaco2006 Oct]Another Cow Number Game 奶牛的数字游戏
    [BZOJ1692][Usaco2007 Dec]队列变换
    [BZOJ1599][Usaco2008 Oct]笨重的石子
    [BZOJ1603][Usaco2008 Oct]打谷机
    [BZOJ1614][Usaco2007 Jan]Telephone Lines架设电话线
    [BZOJ1617][Usaco2008 Mar]River Crossing渡河问题
    [BZOJ1612][Usaco2008 Jan]Cow Contest奶牛的比赛
    [BZOJ1600][Usaco2008 Oct]建造栅栏
    [BZOJ1230][Usaco2008 Nov]lites 开关灯
    hdu 2199 Can you solve this equation? 二分
  • 原文地址:https://www.cnblogs.com/younes/p/1658935.html
Copyright © 2011-2022 走看看