观察一段简单的 C++ 代码,比如 int age = 20; 或 const int maxCount = 10;,我们会发现除了 20、10 这些具体数字之外,代码里还有很多英文单词。
这些英文单词主要分为两类。第一类是 C++ 语言预先占用的单词,叫做 “关键字”,比如 int、const。第二类是我们自己给数据或模块起的名字,叫做标识符,比如 age、maxCount。这一节我们先来认识 C++ 的关键字。
C++ 关键字是什么?
在 C++ 中,关键字(也叫 “保留字”)指的是 C++ 语言本身 “已经在使用” 的单词,每一个关键字都有特定的语法作用。比如用来指定类型的 int、用来定义常量的 const,以及后面会陆续学到的 if、for、return、class 等,都属于 C++ 关键字。
这些单词为什么特殊呢?因为编译器看到它们时,会直接按照固定好的语法规则去解析。简单来说,这些名字已经被 C++ 官方占用了,因为 C++ 自己要用,所以我们在给变量、常量或函数起名字时,就不能再使用这些关键字了。
现代 C++ 一共包含 90 多个关键字,其中表示真和假的 true 与 false 也属于关键字。初学阶段最常遇到的 30 个关键字如下表所示。
| auto | bool | break | case | char |
|---|---|---|---|---|
| class | const | continue | default | do |
| double | else | false | float | for |
| if | int | long | namespace | return |
| short | sizeof | static_cast | struct | switch |
| true | unsigned | using | void | while |
这里列举常见关键字只是方便小伙伴们平时查询,并不是叫大家死记硬背。等我们把后面的课程学完之后,这些关键字自然而然就会认得了。
为了方便建立直观印象,我们可以按用途把常见关键字大致分为以下 3 类:
- 数据类型相关:用来声明各种数据类型,如
int、double、char、bool、unsigned等。 - 流程控制相关:用来进行条件判断和循环控制,如
if、else、switch、for、while、break等。 - 结构与操作相关:用来限定属性、组织结构或执行特定操作,如
const、return、namespace、sizeof、class等。
C++ 关键字的使用规则
在日常编写 C++ 代码时,对于关键字的使用,我们需要遵循以下 2 条规则:
- 不能把关键字当成普通的变量名、常量名或函数名来使用。
- C++ 所有的关键字全部由小写字母组成,严格区分大小写。
对于第一条规则,比如在表示 “班级编号” 时,不少初学者会下意识地把变量名起成 class,结果一编译就会报错。下面我们来看一个例子。
示例 1:关键字不能作变量名
#include <iostream>
int main() {
int class = 1001;
std::cout << class;
return 0;
}运行结果如下。
(报错)error: expected unqualified-id before 'class'分析:
int class = 1001; 尝试使用 class 作为整型变量的名字。由于 class 是 C++ 专门用来定义 “类” 的关键字,编译器无法把它当成普通名称处理,于是直接报错,提示在 class 前缺少合法的变量名。
如果在实际开发中确实需要表达 “班级” 或 “返回值” 这类含义,只需要在后面加上其他单词组合成新名字,避开关键字本身就可以了,比如将变量名起为 classId 或 returnValue。
提示 在 VSCode 等代码编辑器中,合法的 C++ 关键字通常会显示为专门的高亮颜色。如果我们不小心把关键字写成了变量名,编辑器往往也会在代码下方标出红色波浪线提前提醒。
对于第二条规则,有些小伙伴敲代码时受英文打字习惯影响,容易把 int 敲成 Int,或者受 Python 习惯影响把布尔值 true 敲成首字母大写的 True,这在 C++ 中都会导致编译失败。请看下面例子。
示例 2:关键字误写为大写
#include <iostream>
int main() {
Int year = 2026;
std::cout << year;
return 0;
}运行结果如下。
(报错)error: 'Int' was not declared in this scope分析:
在这个例子中,我们将关键字 int 的首字母写成了大写。在 C++ 编译器眼里,只有全小写的 int 才是表示整数类型的关键字,而首字母大写的 Int 只是一个陌生的名字。编译器发现前面并没有定义过 Int,就会报 “未在当前作用域中声明” 的错误。
因此平时写代码时要注意,书写任何 C++ 关键字都必须保持全部小写:
// 正确方式
int year = 2026;
bool passed = true;
// 错误方式
Int year = 2026;
bool passed = True;常见问题
1. 代码里经常出现的 main、std 和 cout 也是 C++ 关键字吗?
很多初学者容易把每篇代码里都会见到的 main、std 和 cout 也当成关键字。实际上,它们并不是 C++ 关键字,而是具有特定用途的名称:
main:C++ 程序入口函数约定的固定名称,属于特殊的函数名,不是关键字。
std 和 cout:C++ 标准库中预先定义好的名称,其中 std 是标准库的命名空间,cout 是标准输出对象,它们同样不属于语言内置的关键字。
虽然 main、std 和 cout 在语法分类上不是关键字,但它们在每个 C++ 程序中都有固定的重要用途。因此我们在自己定义变量或常量时,同样不要去跟它们重名。
