第2章 变量和基本类型
数据类型是程序的基础:它告诉我们数据的意义以及我们能在数据上执行的操作。
C++语言支持广泛的数据类型,它定义了几种基本内置类型(如字符、整形、浮点型等),同时也为程序员提供了自定义数据类型的机制。基于此,C++标准库定义了一些更加复杂的数据类型,如可变长字符串和向量等。
本章将主要讲述内置类型,并带领大家初步了解C++语言是如何支持更复杂数据类型。
2.1 基本内置类型
C++定义了一套包括算术类型(arithmetic type)和空类型(void)在内的基本数据类型。其中算术类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值,仅用于一些特殊的场合,例如最常见的是,当函数不返回任何值时使用空类型作为返回类型。
注:arithmetic [.erɪθ'metɪk] n.算术
2.1.1 算术类型
算术类型分为两类:整型(intergral type,包括字符和布尔型在内)和浮点型。
算术类型的尺寸(所占的位数,bit位)在不同的机器上有所差别。下表列出了C++标准规定的尺寸的最小值,同时允许编译器赋予这些类型更大的尺寸。
类型 | 含义 | 最小尺寸 | |
整形 | bool | 布尔类型 | 未定义 |
char | 字符 | 8位 | |
wchar_t | 宽字符 | 16位 | |
char16_t | Unicode字符 | 16位 | |
char32_t | Unicode字符 | 32位 | |
short | 短整型 | 16位 | |
int | 整型 | 16位 | |
long | 长整型 | 32位 | |
long long | 长整型 | 64位 | |
浮点型 | float | 单精度浮点型 | 6位有效数字 |
double | 双精度浮点型 | 10位有效数字 | |
long double | 扩展精度浮点型 | 10位有效数字 |
布尔类型(bool)的取值是真(true)或者假(false)。
C++提供了几种字符类型,其中多数支持国际化。基本字符类型是char,一个char的空间应确保可以存放机器基本字符集中任意字符对应的数字值,换句话说,一个char的大小和一个机器字节一样。其他字符类型用于扩展字符集,如wchar_t、char16_t、char32_t。wchar_t类型用于确保可以存放机器最大扩展字符集中任意一个字符,类型char16_t和char32_t则为Unicode字符集服务(Unicode是用于表示所有自然语言中字符的标准)。
C++语言规定,int >= short,long >= int,long long >= long。其中数据类型long long为C++11中新定义的。
浮点型可以表示单精度、双精度和扩展精度值。C++标准指定了一个浮点数有效位数的最小值,然而大多数编译器都实现了更高的精度。通常,float以1个字(32bit)来表示,double以2个字(64bit)来表示,long double以3或者4个字(96或128bit)来表示。一般来说,类型float和double分别有7和16个有效位;类型long double则常常被用于有特殊浮点需求的硬件,它的具体实现不同,精度也各不相同。