第2章 变量和基本类型
类型是所有程序的基础。类型告诉我们数据代表什么意思以及可以在数据上执行哪些操作。
C++(www.cppentry.com)定义了几种基本类型:字符型、整型、浮点型,等等。该语言还提供了允许自定义数据类型的机制,标准库利用这些机制定义更复杂的类型,比如可变长字符串string、vector等,还能修改已存在的类型以形成复合类型。本章介绍内置类型,并开始介绍C++(www.cppentry.com)如何支持更复杂的类型。
类型确定了数据和操作在程序中的意义。就像我们在第1章看到的,语句
有不同的含义,取决于i和j的类型。如果i和j都是整型,则这条语句表示一般的算术“+”运算;如果i和j都是Sales_item对象,则这条语句是将这两个对象的组成成分加起来。
C++(www.cppentry.com)中,类型的支持是广泛的:该语言本身定义了一组基本类型和修改已有类型的方法,还提供了一组特性允许自定义类型。本章通过介绍内置类型和如何关联类型与对象来探讨C++(www.cppentry.com)中的类型。本章还将介绍更改类型和建立自定义类型的方法。
2.1 基本内置类型
C++(www.cppentry.com)定义了一组表示整数、浮点数、单个字符和布尔值的算术类型(arithmetic types),另外还定义了一种称为void的特殊类型。void类型没有对应的值,仅用在有限的情况下。通常用作无返回值的函数的返回类型。
算术类型的存储空间依机器而定。类型存储空间是指用来表示该类型的位(bit)数。C++(www.cppentry.com)标准保证了每个算术类型的最小存储空间,但它并不阻止编译器使用更大的存储空间。事实上,对于int类型,几乎所有的编译器使用的存储空间都比所要求的大。表2-1列出了内置算术类型和其对应的最小存储空间。
因为位数的不同,这些类型所能表示的最大(最小)值也因机器的不同而有所不同
C++(www.cppentry.com)的内置类型与其在计算机的存储表示紧密相关。计算机以位序列存储数据,每一位存储0或1。一段内存可能存储着
00011011011100010110010000111011…… |
在位这一级上,存储是没有结构和意义的。
让存储具有结构的最基本的方法是用块(chunk)处理存储。大部分计算机都使用特定位数的块处理存储,块的位数一般是2的幂,因为这使得一次处理8、16或32位变得容易。64和128位的块也变得更为普遍。虽然确切的大小因机器不同而不同,但是通常将8位的块作为一个字节,32位或4个字节作为一个“字(word)”。
大多数计算机将存储器中的每一个字节和一个叫做地址的数关联起来。假如给定一个8位字节和32位字的机器,我们可以将存储器的字表示如下:< xml:namespace prefix = std />
在这个图中,字节地址表示在左边,地址后面为字节的8位。
可以用地址表示以该地址开始的任何几个不同大小的位集合。可以说地址为736424的字,也可以说地址为736426的字节。例如,可以说地址为736425的字节和地址为736427的字节不相等。
要让地址为736425的字节具有意义,必须要知道存储在该地址的值的类型。一旦知道了该地址的值的类型,就知道了表示该类型的值需要多少位和如何解释这些位。
如果知道地址为736425的字节的类型是8位无符号整数,那么就可以知道该字节表示整数112。另外,如果这个字节是ISO-Latin-1字符集中的一个字符,那它就表示小写字母q。虽然两种情况的位相同,但归属于不同类型,解释也就不同。
【责任编辑:
董书 TEL:(010)68476606】