1.3 字面量
字面量是源代码中的常量值,它们是程序中直接使用的数据。例如,42
、3.14
、"Hello, World!"
都是字面量。
这里只简单介绍一下 C++ 中的字面量,更多内容,如用户定义字面量会在后续章节中详细介绍。
整数字面量
整数字面量是用于表示整数的字面量。例如,42
、0x42
都是整数字面量。42
表示整数的42,0x42
表示十六进制表达的66。
下列是一些常见的数字字面量写法
源文件文本 | 含义 |
---|---|
0 | 十进制0 |
42 | 十进制42 |
0x314 | 十六进制314 |
0314 | 八进制314 |
0b1010 | 二进制1010 |
关于进制
本文并不涉及二进制、八进制、十六进制的表示,读者可以自行查阅相关资料了解更多内容。
整数字面量可能存在后缀,例如u
、l
、z
,用于指定数字字面量的类型。例如,42u
、314l
都是整数数字字面量。
注意,整数字面量开头并没有正负号,数字字面量前面的+
和-
是一个不属于字面量的标点符号。
数字字面量与标识符
笼统的来说,在标识符前面加上数字,就得到了一个编译器会当做数字处理的东西。例如,hello
是一个标识符,而 42hello
编译器就会当做数字字面量处理(把hello当做后缀)。因此,可以通过首字符是数字来判断数字字面量。
字符字面量
字符字面量是用单引号'
括起来的字符。例如,'a'
、'b'
、'c'
都是字符字面量。
字符字面量可能存在前缀,例如u8
、u
、U
、L
,用于指定字符字面量的类型。例如,u8'a'
、u'a'
、U'a'
、L'a'
都是字符字面量。
在字符字面量中,会出现转义序列,它们是以反斜杠\
开头的字符序列。例如,'\n'
表示换行符,'\t'
表示制表符。 具体而言,换行符是一个字符,它的ASCII码是10。用\n
表示换行符(两个字符,ASCII码分别是92和110),是为了方便源码的书写和阅读。这种转义序列只作用在源码中,编译后的程序中只存在转义序列对应的字符。
转义序列也可能是八进制数字,或者十六进制数字(注意,这不会是十进制数字)。例如,'\102'
,'\x42'
都表示ASCII码为66的字符B
,\x
后面的数字是十六进制的数字。
字符串字面量
字符串字面量是用双引号"
括起来的字符序列。例如,"Hello, World!"
是字符串字面量。字符串字面量是一组字符的序列,它的性质我们在后续章节中会详细介绍。
类似于字符字面量,字符串字面量也可能存在前缀,例如u8
、u
、U
、L
,用于指定字符串字面量的类型。例如,u8"Hello, World!"
、L"Hello, World!"
、U"Hello, World!"
都是字符串字面量。
字符串字面量中也会出现转义序列,例如,"Hello, World!\n"
中,\n
表示换行符。字符串字面量中的转义序列和字符字面量中的转义序列是一样的,一个转义序列用来表示表示一个字符。
浮点数字面量
浮点数字面量是用于表示浮点数的字面量。例如,1.14
、.314f
都是浮点数字面量。
源文件文本 | 含义 |
---|---|
3.14 | 十进制-3.14 |
.314 | 十进制0.314 |
3.14e2 | 科学计数法表示的314 |
3.14e-2 | 科学计数法表示的0.0314 |
0xC.12p+3 | 科学计数法表示的96.5625 |
小数中p和e的区别
以0x或0X开头时,表示16进制小数。 e或E后面的数字表示10的指数,p或P后面的数字表示2的指数。
数字字面量可能存在后缀,例如f
、l
、f16
,用于指定浮点数字面量的类型。例如,1.14f
、3.14l
都是浮点数字面量。
指针字面量
指针字面量只有nullptr
这一种,由nullptr
关键字组成,用来表示空指针。