C++中的易混淆的返回类型

来源:互联网 发布:董小飒淘宝店网址 编辑:程序博客网 时间:2024/05/24 13:28

最近在看标准库时碰到很多容易混淆的知识点:

vector源码实现中:

    typedef size_t   sizetype ;

    typedef  ptrdiff_t  defference_type ;

就有以上这两句话,在C++ primer也总是看到这几种类型。

1.size_type类型

   事实上size_type是一个无符号类型的值。

   string::size_type 表示的是标准库中string类型的size()函数返回的的值,表示string对象的大小。

   vector::size_type 表示的是标准库中vector容器的size()函数或capacity()函数返回的的值,表示vector对象中元素个数的大小或vector空间大小。

   但是为什么不直接返回无符号类型的值呢?那是因为无符号类型的值在不同机器上的大小是不同的。

  使用这个类型体现了标准库与机器无关的一个特性。还有其他标准数据库类型定义了配套的类型来解决这个问题。

2.difference_type类型

    difference_type类型是与迭代器相关联的一个概念。

    它表示指向同一个容器的两个迭代器之间的距离,显然它是一个有符号类型的

3.size_t类型

   size_t类型是在使用数组时碰到的一个类型。在使用数组下标时经常将其定义为size_t类型。size_t类型是一个与机器相关的无符号类型,它被设计得足够大以便能够表示内存中任意对象的大小。size_t类型是在cstddef头文件中定义的,这个文件是C标准库stddef.h头文件的C++语言版本。试想如果在遍历数组时只是定义为long,当数组中的元素远大于long表示的范围,那么确定能够保证便利到所有的数组中的所有元素吗?

  sizeof()的返回类型就是size_t类型

4.ptrdiff_t类型

  ptrdiff类型就两个指针相减返回的结果类型,ptrdiff_t类型也是在cstddef头文件中定义的一个与机器相关的类型,只是它是一个有符号类型。

5.constexpr类型

    const expression的意思,把变量声明此类型由编译器来判断该变量值是否是一个常量表达式。

6.auto类型

    让编译器帮助我们去分析表达式属于的类型,并可以使用表达式的值来初始化该变量。

7.decltype类型

   返回表达式的类型。





   

  

       

0 0
原创粉丝点击