字面值常量
1. 不能修改
2. 每个字面值常量都有相应的类型。例如,0 是 int,3.14 double
3. 只有内置类型存在字面值常量
4. 没有类类型的字面值,因此,也没有任何标准库类型的字面值
5. 称之为字面值因为只能以它的值称呼它
(一)整型字面值
1. 三种:十进制(decimal) 八进制(octal) 十六进制(hexadecimal)
20(十)020(八)0x20(十六)
2. 加L或者u分别代表long和unsigned类型,不能有空格。
书中提醒两遍:不提倡用小写字母l,容易与数值1混淆。
(二)浮点字面值规则
1. 通常可以用十进制或者科学计数法来表示浮点字面值
2. 默认的浮点字面值常量为double类型
3. 在数值后面加上F(或f)和L(或者l)分表表示单精度和双精度
(三)布尔字面值和字符字面值
1. true和false是布尔型的字面值
2. 可打印的字符型字面值通常那个用一对单引号来定义:‘a’、‘2’、‘,’、‘ ’(均是char类型的)
3. 加上L能够得到wchar_t类型的宽字符字面值:L‘a’
(四)非打印字符的转义序列
1. 转义字符表示
换行符 | \n | 水平制表符 | \t |
纵向制表符 | \v | 退格符 | \b |
回车符 | \r | 进纸符 | \f |
报警(响铃)符 | \a | 反斜线 | \\ |
疑问号 | \? | 单引号 | \' |
双引号 | \" |
2. 无论是普通字符,还是非打印字符和特殊字符,都可以表示为“通用转义字符”。如八进制形式的“\7(响铃符)、\12(换行符)、\0(空字符)、\62(数字2)”(可以对照ASCII码表看一下)。“通用转义字符”也可以用十六进制表示(\xddd)。
注:字符‘\0’通常表示空字符,还有更特殊的意义。
(五)字符串字面值
上述四种四面值都是基本内置类型,字符串字面值不属于上述类别。
1. 用双引号括起来的零个或者多个字符表示。不可打印字符表示成相应的转义序列:
“hello world”
“”
“\ncc\tnihao\n”
2. 为了兼容c语言,C++中所有的字符串字面值都有编译器自动在末尾添加一个空字符。
注意区别:
‘a’ :字符字面值,上述第三类,单个字符,未添加空字符
“a”:包含‘a’和‘\0’两个字符的字符串
3. 宽字符字符串字面值,所有字符都转化为宽字符即可
L“C++ program”
(六)字符串字面值的连接
1. 两个相邻的仅由空格、制表符、换行符分开的字符串字面值,可连接成一个新字符串字面值。
多行书写长字符串字面值变得简单。
#include<iostream>
int main()
{
std::cout << "a multi-line"
"string literal"
"using concatenation"
<< std::endl;
return 0;
}
2. 如果连接字符串面值和宽字符串字面值结果是
未定义的
(七)多行字面值
不常用:在一行的末尾加一反斜杠可将此行和下一行当作同一行处理
但要注意:反斜杠必须是该行的尾字符(不允许其后面由注释或者空格)。同样,后继行首的任何空格和制表符都是字符串字面值的一部分。
#include<iostream>
int main()
{
std::cout <<
"a multi-line \
string literal \
using concatenation"
<< std::endl;
return 0;
}
#include<iostream>
int main()
{
std::cout <<
"a multi-line \
string literal \
using concatenation"
<< std::endl;
return 0;
}
#include<iostream>
int main()
{
std::cou\
t << "Hi" << st\
d::endl;
return 0;
}
第37页,<不要依赖未定义行为>很重要。