字面值常量(literal constant),“字面值”是指只能用它的值称呼它,“常量”是指其值不能修改。每个字面值都有相应的类型,3.14是double型,2是int型。只有内置类型存在字面值。
1. 整形字面值规则
整形字面值常量可以用十进制、八进制、十六进制表示。
20 // dec
024 // oct(以0开头)
0x14 // hex(以0x或0X开头)
整形字面值常量的类型默认为int或long,其值适合int就是int类型,比int大就是long类型。在数值后加L或l(小写字母l容易与数字1混淆,建议用L)可以指定为long,加U或u指定为unsigned类型,加UL或LU定义为unsigned long类型。没有short类型的字面值常量。
2. 浮点字面值规则
可以用十进制或科学计数法(指数用E或e)表示,默认为double,在数值后加F或f表示单精度,加L或l表示扩展精度。
3.14159F .001f 12.345L 0.
3.14159E0f 1E-3F 1.2345E1L 0e0
3. 布尔字面值和字符字面值
布尔字面值:true、false。字符字面值由单引号定义:’2’(char类型)、L’a’(wchar_t类型)。
4. 非打印字符和转义序列
非打印字符和特殊字符(如单引号、双引号、反斜杠)都要写为转义字符(以反斜杠开头)。
无论是普通字符,还是非打印字符和特殊字符,都可以表示为“通用转义字符”。如八进制形式的“\7(响铃符)、\12(换行符)、\0(空字符)、\62(数字2)”(可以对照ASCII码表看一下)。“通用转义字符”也可以用十六进制表示(\xddd)。
5. 字符串字面值
需要用双引号括起来,非打印字符写要转义,编译器会自动在末尾添加一个空字符。
“hello c++” // simple string literal“” // empty string literal“\n hello \t c++” // string literal using newlines and tabsL”hello c++” // a wide string literal
6. 字符串字面值的连接
两个相邻的,仅由空格、制表符、换行符分隔的字符串字面值,将连接在一起。
std::cout << “a multi-line “ “string literal “ “using concatenation” << std::endl
输出:a multi-line string literal using concatenation
“std::cout << “multi-line” L”literal “ << std::endl;”,该语句结果未定义,可能执行也可能崩溃。
7 多行字面值
可以使用反斜杠,将多行内容当作同一行处理。
// multiline string literalstd::cout << “a multi-line \string literal \using a backslash” << std::endl;
反斜杠必须是行尾字符,后面不能有注释或空格。后继行行首的任何空格和制表符都是字符串字面值的一部分。
【学习资料】 《c++ primer》