第二章 变量和基本类型
2.1. 基本内置类型
C++ 定义了一组表示整数、浮点数、单个字符和布尔值的算术类型 ,另外还定义了一种称为 void 的特殊类型。void 类型没有对应的值 ,仅用在有限的一些情况下,通常用作无返回值函数的返回类型 。
表示整数、字符和布尔值的算术类型合称为 整型 。
字符类型有两种:char 和 wchar_t 。char 类型保证了有足够的空间,能够存储机器基本字符集中任何字符相应的数值,因此,char 类型通常是单个机器字节(byte)。wchar_t 类型用于扩展字符集,比如汉字和日语,这些字符集中的一些字符不能用单个 char 表示。
short 、int 和 long 类型都表示整型值,存储空间的大小不同。一般, short 类型为半个机器字 长,int 类型为一个机器字长,而 long 类型为一个或两个机器字长(在 32 位机器中 int 类型和 long 类型通常字长是相同的)。
整型 int 、short 和 long 都默认为带符号型 。要获得无符号型则必须指定该类型为 unsigned ,比如 unsigned long 。unsigned int 类型可以简写为 unsigned ,也就是说,unsigned 后不加其他类型说明符意味着是 unsigned int 。
和其他整型不同,char 有三种不同的类型 :plain char 、unsigned char 和 signed char 。虽然 char 有三种不同的类型,但只有两种表示方式。可以使用 unsigned char 或 signed char 表示 char 类型。使用哪种 char 表示方式由编译器而定。
对于实际的程序来说,float 类型精度通常是不够的——float 型只能保证 6 位有效数字 ,而 double 型至少可以保证 10 位有效数字 ,能满足大多数计算的需要。
2.2. 字面值常量
字面值整数常量的类型默认为 int 或 long 类型。其精度类型决定于字面值——其值适合 int 就是 int 类型,比 int 大的值就是 long 类型。通过增加后缀,能够强制将字面值整数常量转换为 long 、unsigned 或 unsigned long 类型 。通过在数值后面加 L 或者 l (字母“l”大写或小写)指定常量为 long 类型。
类似地,可通过在数值后面加 U 或 u 定义 unsigned 类型 。同时加 L 和 U 就能够得到 unsigned long 类型的字面值常量。没有 short 类型的字面值常量。
通常可以用十进制或者科学计数法来表示浮点字面值常量。使用科学计数法时,指数用 E 或者 e 表示 。默认的浮点字面值常量为 double 类型 。在数值的后面加上 F 或 f 表示单精度 。同样加上 L 或者 l 表示扩展精度(再次提醒,不提倡使用小写字母l)。
下面每一组字面值表示相同的值:
3.14159F .001f 12.345L 0. 3.14159E0f 1E-3F 1.2345E1L 0e0
也存在宽字符串字面值,一样在前面加“L ”,如
L"a wide string literal"
如果连接字符串字面值和宽字符串字面值,将会出现什么结果呢?例如:
std::cout << "multi-line " L"literal " << std::endl;
其结果是未定义的 ,也就是说,连接不同类型的行为标准没有定义。这个程序可能会执行,也可能会崩溃或者产生没有用的值,而且在不同的编译器下程序的动作可能不同。