字面值常量#

字面值 常量用于表示不同类型的值。例如,7 表示整形值“七”,"早餐" 表示字符串值 “早餐”,true 表示布尔值“真”。

整数字面值常量#

整数字面值常量:十进制、八进制、十六进制、二进制。

  • 十进制数字就是我们常用的:0、1、2、3、4、5、6、7、8 和 9。

  • 八进制数字,需以 0 作为开头,仅仅包含数字:0、1、2、3、4、5、6 和 7。示例:

00
0
07
7
010 // 0 * 8^2 + 1 * 8^1 + 0
8
011 // 0 * 8^2 + 1 * 8^1 + 1
9
-011
-9
  • 十六进制数字,需以 0x 或者 0X 作为开头,仅仅包含数字:0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f、A、B、C、D、E 和 F。示例:

0x0
0
0x9
9
0xa
10
0XA
10
0xf
15
0x010 // 0 * 16^2 + 1 * 16 + 0
16
-0x010
-16
  • 二进制数字,需以 0b 或者 0B 作为开头(C++14 新特性),仅仅包含数字:0 和 1。示例:

0b1
1
0b111 // 1 * 2^2 + 1 * 2^1 + 1
7
-0b111
-7
  • 后缀 u 或者 U 表示无符号整数,而后缀 l 或者 L 表示长整型,例如:

10u
10
-5u
4294967291
-1u
4294967295
5L
5
-5L
-5

浮点字面值常量#

浮点字面值常量包含一个小数点 .,一个指数(如 e5),或者通过后缀 d 或者 f 指明是浮点值。

123.
123.00000
123.00
123.00000
123.3f
123.300f
1.23f
1.23000f
0.123
0.12300000
1.23e3
1230.0000
1.23e-3
0.0012300000
true
true
false
false

字符字面值常量#

字符字面值是指用单引号 '' 包裹起来的字符。如:

'a'
'a'
'@'
'@'
'\n'
'\n'

字符串字面值常量#

字符串字面值常量是使用双引号包裹的字符序列。比如:

"中国"
"中国"

字符串字面值可以通过空格拼接:

"你好" "书籍" "!"
"你好书籍!"

指针字面值常量#

指针字面值常量只有一个:空指针 nullptr

任何值为 0 的常量表达式都可以当作空指针使用,例如:

int *p = nullptr;
p
@0x7ffcf4bcefb8
int *p1 = 0; // 正确:空指针
p1
@0x7ffcf4bcefb8
int *p2 = 2 - 2; // 正确:空指针
input_line_81:2:7: error: cannot initialize a variable of type 'int *' with an rvalue of type 'int'
 int *p2 = 2 - 2; // 正确:空指针
      ^    ~~~~~
Interpreter Error: 
int *p3 = 1 // 错误:1 是一个 int,不是指针
input_line_82:2:7: error: cannot initialize a variable of type 'int *' with an rvalue of type 'int'
 int *p3 = 1 // 错误:1 是一个 int,不是指针
      ^    ~
Interpreter Error: 
int z = 0;
int *p4 = z; // 错误:z 不是一个常量
input_line_83:3:6: error: cannot initialize a variable of type 'int *' with an lvalue of type 'int'
int *p4 = z; // 错误:z 不是一个常量
     ^    ~
Interpreter Error: 

在 C++ 中(但 C 中不是,因此要小心 C 头文件),NULL 被定义为 0,因此,可以:

int *p4 = NULL;
p4
@0x7ffcf4bcefb8