2.2 字面值常量
字面值常量,称之为字面值是因为只能用它的值来称呼它,称之为常量是因为它的值不能修改。
每个字面值都有相应的类型。
只有内置类型存在字面值,没有类类型的字面值。因此也没有任何标准库类型的字面值。
1. 整型字面值规则
定义字面值整数常量可以使用以下三种进制中的任何一种:十进制、八进制和十六进制,这些进制不会改变其二进制位的表示形式。以0开头的字面值整数常量表示八进制,以0x或0X开头的表示十六进制。
字面值整数常量的类型默认为int或long类型。其精度类型决定于字面值,其值适合int就是int类型,比int大的值就是long类型。
通过增加后缀,能强制将之面值整数常量转换为long、unsigned、unsigned long类型。通过在数值后面增加U或u指定常量为unsigned类型,通过在数值后面加L或l指定常量为long类型,同时加U/u和L/l就得到unsigned long类型。数值与后缀之间不能加空格。
没有short类型的字面值常量。
2. 浮点字面值规则
通常可以用十进制或者科学计数法来表示浮点字面值常量。使用科学计数法时,指数用E或e表示。
默认的浮点字面值常量为double类型。在数值的后面加上F或f表示单精度,同样加上L或l表示扩展精度。
3. 布尔字面值和字符字面值
单词true和false是布尔型的字面值。
可打印的字符型字面值通常用一对单引号来定义,这些字符都是char类型的。在字符面值前面加L就能得到wchar_t类型的宽字符字面值。
4. 非打印字符的转义序列
不可打印字符和特殊字符都用转义字符书写,转义字符都是以反斜线符号开始。
可以将任何字符表示为\ddd(一到三个八进制)或\xhh(一到两个十六进制)。
5. 字符串字面值
字符串字面值是一串常量字符,用双引号括起来的零个或者多个字符表示,不可打印字符表示成相应的转义字符。
为了兼容C语言,C++中所有的字符串字面值都由编译器自动在末尾添加一个空字符。
也存在宽字符串字面值,一样在前面加L。
宽字符串字面值是一串常量宽字符,同样以一个宽空字符结束。
6.字符串字面值的连接
两个相邻的仅由空格、制表符或换行符分开的(宽)字符串字面值可以连接成一个新(宽)字符串字面值。
如果连接字符串字面值和宽字符串字面值,其结果是未定义的,这个程序可能执行,也可能会崩溃或者长生没有用的值,而且在不同的编译器下程序的动作可能不同。
C++的格式非常自由,在一些地方不能插入空格,在一些地方不能断开一行,但可以通过使用反斜线符号巧妙实现。在一行的末尾加一反斜线可将此行和下一行当作同一行处理。
反斜线符号必须是改行的尾字符,不允许其后面有注释或空格。同样,后继行行首的任何空格和制表符都是字符串字面值的一部分。