博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c++中,size_typt, size_t, ptrdiff_t 简介
阅读量:7268 次
发布时间:2019-06-29

本文共 1483 字,大约阅读时间需要 4 分钟。

size_type 类型

  从逻辑上来讲,size() 成员函数似乎应该返回整形数值,或如 2.2 节“建议”中所述的无符号整数。但事实上,size 操作返回的是 string::size_type 类型的值。我们需要对这种类型做一些解释。

  string 类类型和许多其他库类型都定义了一些配套类型(companion type)。通过这些配套类型,库类型的使用就能与机器无关(machine-independent)。size_type 就是这些配套类型中的一种。它定义为与 unsigned 型(unsigned int 或 unsigned long)具有相同的含义,而且可以保证足够大能够存储任意 string 对象的长度。为了使用由 string 类型定义的 size_type 类型是由 string 类定义。

  使用 int 变量的另一个问题是,有些机器上 int 变量的表示范围太小,甚至无法存储实际并不长的 string 对象。如在有 16 位 int 型的机器上,int 类型变量最大只能表示 32767 个字符的string 个字符的 string 对象。而能容纳一个文件内容的 string 对象轻易就会超过这个数字。因此,为了避免溢出,保存一个 stirng 对象 size 的最安全的方法就是使用标准库类型string::size_type。

  vector 对象size_type:成员函数size 返回相应 vector 类定义的 size_type 的值。使用 size_type 类型时,必须指出该类型是在哪里定义的。vector 类型总是包括 vector 的元素类型:

1 vector
::size_type // ok2 vector::size_type // error

 

size_t 类型

在用下标访问元素时,vector 使用 vector::size_type 作为下标的类型,而数组下标的正确类型则是 size_t(第 3.5.2 节)。

size_t 类型定义在 cstddef 头文件中,该文件是 C 标准库的头文件 stddef.h 的 C++ 版本。它是一个与机器相关的 unsigned 类型,其大小足以保证存储内在中对象的大小。

 

 ptrdiff_t 类型

  只要两个指针指向同一数组或有一个指向该数组末端的下一单元,C++ 还支持对这两个指针做减法操作:

1 ptrdiff_t n = ip2 - ip; // ok: distance between the pointers

结果是 4,这两个指针所指向的元素间隔为 4 个对象。两个指针减法操作的结果是标准库类型(library type)ptrdiff_t 的数据。与 size_t 类型一样,ptrdiff_t 也是一种与机器相关的类型,在 cstddef 头文件中定义。size_t 是unsigned 类型,而 ptrdiff_t 则是 signed 整型。

  这两种类型的差别体现了它们各自的用途:size_t 类型用于指明数组长度,它必须是一个正数;ptrdiff_t 类型则应保证足以存放同一数组中两个指针之间的差距,它有可能是负数。例如,ip 减去 ip2,结果为 -4。

  允许在指针上加减 0,使指针保持不变。更有趣的是,如果一指针具有 0 值(空指针),则在该指针上加 0 仍然是合法的,结果得到另一个值为 0 的指针。也可以对两个空指针做减法操作,得到的结果仍是 0。

转载地址:http://bigdm.baihongyu.com/

你可能感兴趣的文章
2.3. mysqladmin - client for administering a MySQL server
查看>>
EntityFramework之你不知道的那些事(七)
查看>>
YY博客园UML用例图-活动图-状态图之博客模块
查看>>
iOS - UITextView
查看>>
c#的DateTime.Now函数详解
查看>>
Spring Boot + Websocket + Thymeleaf + Lombok
查看>>
linux命令之uniq
查看>>
SugarCRM 插件介绍
查看>>
aliyun.com
查看>>
cygwin的使用(2)
查看>>
App域名劫持之DNS高可用 - 开源版HttpDNS方案详解(转)
查看>>
Install Oracle 11gR2 on Debian wheezy(转)
查看>>
将若干字符串按字母顺序(由小到大)输出(用指针)
查看>>
PostgreSQL 如何快速构建 海量 逼真 测试数据
查看>>
【错误解决】[Maven]使用Maven配置Jstl出现异常:The absolute uri: http://java.sun.com/jsp/jstl/core cannot......
查看>>
linux命令之touch
查看>>
Content://sms
查看>>
估算之痛
查看>>
[20171206]rman与truncate2.txt
查看>>
谈消息总线的路由模型
查看>>