一、字面值常量概述
- 字面值常量包括整型字面值,浮点型字面值,字符和字符串字面值,布尔字面值,指针字面值四种。
- 字面值常量的形式和值决定了他的数据类型。
二、整型字面值
1. 整型字面值格式
名称 | 十进制 | 八进制 | 十六进制 |
---|---|---|---|
例子 | 20 | 024 | 0x24 |
注意 | 无 | 前面加零不是大写的o | 前面加零x,不是大写的ox |
2.整型字面值类型
名称 | 十进制 | 八进制和十六进制 |
---|---|---|
可匹配类型 | 有符号整型 | 有符号和无符号整型都有可能 |
- 有符号整型包括int,long,long long
- 无符号整型包括unsigned int,unsigned long,unsigned long long
- 整型字面值类型是能容纳其字面值大小的所有类型中尺寸最小者
- 如果一个字面值连与之关联的尺寸最大的数据类型都放不下,会产生错误
- 负整数的字面值中不包括负号,如-42的字面值是42,负号则是对字面值42取负
三、浮点型字面值
1.浮点型字面值格式
- 浮点型字面值是用小数或者科学计数法来表示
小数表示 | 小数部分为零省略小数 | 整数部分为零省略整数 | 科学计数法表示 | 小数+科学计数法 |
---|---|---|---|---|
3.14 | 3. | .14 | 3e2,3E2 | 3.14E0 |
2.浮点型字面值类型
- 浮点型字面值类型是一个double
四、字符和字符串字面值
1.字符和字符串字面值格式
名称 | 字符字面值 | 字符串字面值 |
---|---|---|
例子 | ’a‘ | ”a“ |
说明 | 单引号引用 | 双引号引用 |
2.字符和字符串字面值类型
- 字符字面值类型为char型,字符串字面值类型为char型数组
- 编译器会在每个字符串结尾加一个空字符‘\0’,如“123”数组大小为4
- 特别注意区分“a”,他对应的数组有两个元素,一个a,一个空字符
- 如果字符串字面值由空格,缩进,换行分割,他们实际是一个字符,存储在一个数组里面。
3.转义序列
- 当使用不可打印字符与在C++中有特殊含义字符时,需要用到转移序列,如换行符‘\n’
- 转移序列被当做一个字符使用
-
C++规定的转义序列
-
泛化转义序列
名称 | 八进制式 | 十六进制式 |
---|---|---|
格式 | \后面跟3个以内八进制数字 | \x后面跟任意个十六进制数字 |
说明 | 八进制数字超过3个则后面的数字不看 | 要用到后面跟着的所有十六进制数字 |
五、布尔字面值和指针字面值
- 布尔字面值:true和false
- 指针字面值
- nullptr:含义是空指针,有C++11引入,解决了NULL的二义性问题。
- NULL二义性:NULL即是空指针,又被重定义为int型的0,在使用NULL作为实参在函数间传递时,其参数类型匹配上具有int型和指针二义性。
六、指定字面值的类型
可以通过添加前缀或者后缀来指定字面值的类型
- 整型字面值只能指定最小匹配类型,最终字面值的类型仍然要根据字面值大小确定
- 使用后缀时候使用L而不使用l,因为字母l会和数字1混淆
- 浮点型字面值不可以添加U后缀,因为浮点型均为有符号类型
- U与L结合:UL,ULL,uL,uLL