标识符与关键字¶
方法速览¶
| 任务 | 方法 | 口诀 |
|---|---|---|
| 判断标识符合法性 | 只能由字母、数字、下划线组成;第一个字符不能是数字 | 字母下划线打头,数字不点头 |
| 大小写 | Sum、sum、SUM 是三个不同的标识符 |
严格区分大小写 |
| 关键字 | 全部小写、不能作标识符;main、cout、NULL 不是关键字 |
关键字是保留字,库名不是 |
| 冷门关键字 | sizeof、true、false、and、or、not 都是关键字 |
替代运算符也是关键字 |
标识符与命名规则¶
标识符(identifier)是程序员给变量、函数、数组、类型等起的名字。
命名规则(三条全满足才合法):
- 只能由字母(
a~z、A~Z)、数字(0~9)、下划线(_)组成; - 第一个字符不能是数字——
sum2合法,2sum非法; - 不能与关键字重名——
int for;编译错误。
三条细则:
- 大小写敏感:
Sum、sum、SUM是三个不同的标识符,Int也不是关键字int(所以int Int;反而合法); - 下划线开头合法:
_sum、__tmp都是合法标识符(规范上建议别用,语法上没错); - 长度:现代编译器对长度几乎无限制,长名字不报错。
判断口诀:先看首字符(非数字),再看成分(字母数字下划线),最后查户口(撞关键字)。
C++14 常见关键字分组表¶
关键字是语言保留的单词,共 80 多个,全部小写。按用途分组记忆:
| 分组 | 关键字 |
|---|---|
| 数据类型 | bool char int short long float double unsigned signed void wchar_t char16_t char32_t |
| 类型修饰/构造 | const constexpr static extern mutable volatile struct union class enum typedef decltype auto |
| 流程控制 | if else switch case default for while do break continue goto return |
| 运算/字面值 | sizeof new delete this true false nullptr |
| 异常与其他 | try catch throw namespace using template typename operator friend inline virtual explicit public private protected |
| 替代运算符 | and or not xor bitand bitor compl not_eq and_eq or_eq xor_eq |
| 汇编/其他 | asm register export |
容易误判的“非关键字”(高频陷阱):
| 名字 | 身份 | 为什么不是关键字 |
|---|---|---|
main |
函数名 | 程序入口是约定的函数名,不是保留字(语法上甚至能当变量名,别这么干) |
printf scanf |
库函数 | <cstdio> 里的函数,本质是标识符 |
cin cout endl |
库对象/操纵符 | std 命名空间里的普通标识符 |
std |
命名空间名 | 也是一个标识符 |
include define |
预处理指令 | #include 是预处理命令,不是 C++ 关键字 |
NULL |
宏 | 预处理器定义的宏(全大写违反关键字全小写的规矩) |
INT_MAX RAND_MAX |
宏 | 同上,全大写 |
记忆锚点:关键字全小写;凡是“全大写”的常量名都是宏,不是关键字;凡是要 #include 才能用的名字都是库标识符,不是关键字。
练习题目¶
练习 1 · 标识符合法性辨析¶
题目
下列标识符中,合法的是( )
- A.
_sum - B.
2sum - C.
for - D.
a-b
答案与解析
答案:A
下划线开头合法。B 数字开头;C 是关键字;D 含减号(不在字母/数字/下划线之列)。
干扰项思路:C 考“撞关键字”、D 考“成分越界”、B 考“首字符”——三种非法原因各占一个。
练习 2 · 找出不合法的¶
题目
下列标识符中,不合法的是( )
- A.
student_name - B.
_2026 - C.
Main - D.
float
答案与解析
答案:D
float 是关键字,不能作标识符。
干扰项思路:C 故意写成大写 Main——大小写敏感,Main 不是 main,更不是关键字,合法;B 下划线开头后接数字,合法。
练习 3 · 数字开头¶
题目
下列标识符中,合法的是( )
- A.
3day - B.
day3 - C.
3_day - D.
-day
答案与解析
答案:B
数字可以在中间或末尾,只是不能在开头。A、C 都是数字开头;D 以减号开头。
练习 4 · 大小写敏感¶
题目
int Sum, sum, SUM; 声明了( )个变量。
- A. \(1\)
- B. \(2\)
- C. \(3\)
- D. 编译错误
答案与解析
答案:C
C++ 严格区分大小写,Sum、sum、SUM 是三个不同的标识符,合法共存。
干扰项思路:A 以为不区分大小写(那是 HTML/某些 BASIC)。
练习 5 · Int 不是 int¶
题目
int Int = 5; 这行代码( )
- A. 编译错误,因为 Int 是关键字
- B. 合法,
Int不是关键字int,大小写敏感 - C. 编译错误,因为变量名不能与类型同名
- D. 合法,但运行时会崩溃
答案与解析
答案:B
关键字全部小写,Int 只是一个普通标识符,可以作变量名。
干扰项思路:A 把“长得像关键字”当成了“是关键字”。
练习 6 · main 的身份¶
题目
下列说法正确的是( )
- A.
main是 C++ 关键字 - B.
main是宏定义 - C.
main是预处理指令 - D.
main不是关键字,它是约定俗成的程序入口函数名
答案与解析
答案:D
main 是普通函数名,靠约定成为入口;它不在关键字表里。
练习 7 · 库名不是关键字¶
题目
下列各项中,都属于 C++ 关键字的一组是( )
- A.
int、cout、for - B.
while、printf、struct - C.
if、else、sizeof - D.
cin、endl、return
答案与解析
答案:C
if、else、sizeof 都是关键字;cout、cin、endl 是标准库标识符,printf 是库函数——要 #include 才能用,都不是关键字。
干扰项思路:每组都混入一个“每天都在用、但不是关键字”的库名字。
练习 8 · NULL 的身份¶
题目
NULL 是( )
- A. C++ 关键字
- B. 预处理宏,不是关键字
- C. 库函数
- D. 命名空间
答案与解析
答案:B
NULL 是 <cstdio> 等头文件里定义的宏,展开后通常是 0 或 nullptr。关键字全小写,全大写的一律不是关键字。
干扰项思路:A 是最常见误解;真正表示空指针的关键字是 C++11 的 nullptr(小写)。
练习 9 · sizeof 是关键字¶
题目
下列哪个是 C++ 关键字?( )
- A.
size - B.
sizeof - C.
SizeOf - D.
size_of
答案与解析
答案:B
sizeof 是关键字(也是运算符,用法 sizeof(int))。A、C、D 的拼写都不对——关键字认拼写,sizeof 连起来、全小写。
练习 10 · true 和 false¶
题目
关于 true 和 false,说法正确的是( )
- A. 它们是普通变量名
- B. 它们是宏,需要
#include才能使用 - C.
True和False也是关键字 - D. 它们是关键字,值分别为 1 和 0
答案与解析
答案:D
bool 类型的两个字面值,都是关键字;参与算术时 true 当 1、false 当 0。
干扰项思路:C 首字母大写——那是 Python 的写法,C++ 关键字全小写。
练习 11 · 预处理指令¶
题目
下列不属于 C++ 关键字的是( )
- A.
include - B.
const - C.
static - D.
union
答案与解析
答案:A
#include 是预处理指令,include 这个单词不在关键字表里;B、C、D 都是关键字。
练习 12 · 替代运算符是关键字¶
题目
表达式 (3 > 2) and (5 != 4) 中的 and( )
- A. 是语法错误,C++ 没有 and 运算符
- B. 是 C++ 关键字,等价于
&& - C. 是库函数,需要包含头文件
- D. 是普通标识符,值恒为 1
答案与解析
答案:B
and、or、not、xor、bitand、bitor、compl、not_eq 等都是 C++ 关键字,是 &&、||、!、^、&、|、~、!= 的替代写法。
干扰项思路:A 想当然认为只有符号写法。
练习 13 · 替代运算符配对¶
题目
关键字 bitand、bitor、compl 依次等价于( )
- A.
&&、||、! - B.
&、|、~ - C.
^、&、| - D.
&、|、!
答案与解析
答案:B
bitand = 位与 &,bitor = 位或 |,compl = 取反 ~;注意与 and(&&)、or(||)、not(!)区分——带 bit 的是位运算。
练习 14 · new 和 delete¶
题目
下列关于 new、delete 的说法正确的是( )
- A. 是库函数,需要
<cstdlib> - B. 是宏定义
- C. 是关键字,作为运算符用于动态内存分配与释放
- D. 是普通标识符,可以作变量名
答案与解析
答案:C
new/delete 是语言内置的运算符型关键字,不依赖任何头文件。
干扰项思路:A 混淆了 malloc/free(那才是库函数)。
练习 15 · this¶
题目
this( )
- A. 只能在 main 函数中使用
- B. 是普通变量名
- C. 是宏
- D. 是关键字,指向当前对象
答案与解析
答案:D
this 是关键字,在类的成员函数里指向当前对象;关键字不能作变量名。
练习 16 · namespace 与 using¶
题目
using namespace std; 中出现的两个单词( )
- A. 都是关键字
- B.
using是关键字,namespace不是 - C. 都不是关键字,
std才是 - D.
std是关键字,其余不是
答案与解析
答案:A
using、namespace 都是关键字;std 是标准库命名空间的名字(标识符)。
干扰项思路:D 借“最眼熟的名字”设陷阱。
练习 17 · goto 与 continue¶
题目
下列都属于流程控制类关键字的一组是( )
- A.
break、continue、goto - B.
break、repeat、goto - C.
exit、continue、return - D.
stop、while、for
答案与解析
答案:A
三个都是跳转/循环控制关键字。
干扰项思路:B 的 repeat、D 的 stop 根本不是 C++ 关键字(Pascal 有 repeat-until,C++ 没有);C 的 exit 是库函数。
练习 18 · 关键字全小写¶
题目
下列都是 C++ 关键字的一项是( )
- A.
IF、Else、WHILE - B.
if、else、while - C.
If、else、while - D.
if、ELSE、While
答案与解析
答案:B
关键字全部小写,任何大写变形(IF、Else)都只是普通标识符。
练习 19 · 下划线开头¶
题目
下列标识符中,合法的是( )
- A.
9var - B.
my var - C.
my-var - D.
__my_var
答案与解析
答案:D
下划线开头(含双下划线)语法上合法。B 含空格、C 含减号、A 数字开头。
练习 20 · 合法性综合¶
题目
以下四项中全部合法的一组标识符是( )
- A.
x1、x_1、_x - B.
1x、x1、x-1 - C.
int、Int、INT - D.
a.b、a b、a,b
答案与解析
答案:A
三个都符合规则。B 的 1x 数字开头、x-1 含减号;C 中 int 是关键字;D 含点、空格、逗号。
干扰项思路:C 用“只有一个合法、两个不合法”的组合考大小写敏感。
练习 21 · union 的类别¶
题目
下列属于 C++ 关键字、但不属于基本数据类型的是( )
- A.
float - B.
union - C.
double - D.
long
答案与解析
答案:B
union 是关键字(构造共用体类型),但它是类型构造器,不是基本数据类型;基本类型只有 bool/char/int/float/double 及其变体。
练习 22 · const 的用途¶
题目
声明一个值不能被修改的变量,应使用关键字( )
- A.
unsigned - B.
static - C.
const - D.
mutable
答案与解析
答案:C
const 修饰的变量初始化后不可再赋值,如 const int MAXN = 100;。
干扰项思路:B 的 static 是“静态存储/内部链接”,不是“不可修改”;D 的 mutable 反而是“允许在 const 里修改”。
练习 23 · C++ 的编程范式¶
题目
关于 C++ 支持的编程范式,正确的是( )
- A. C++ 是纯面向对象语言,不允许出现普通函数
- B. 提供了 class 的语言就不能再定义全局函数
- C. C++ 既能写面向过程程序,也能写面向对象程序
- D. C 语言与 C++ 一样提供 class 与继承
答案与解析
答案:C
C++ 兼容 C 的过程式写法,又提供 class、继承、多态等面向对象机制——是多范式语言(main 本身就是普通函数)。
干扰项思路:A 把“面向对象”绝对化,忽略了 C 子集;D 混淆边界——C 语言没有 class。
练习 24 · 哪个功能涉及面向对象¶
题目
以下哪种功能没有涉及 C++ 语言的面向对象特性支持?( )
- A. C++ 中调用用户定义的类成员函数
- B. C++ 中构造一个
class或struct - C. C++ 中调用
printf函数 - D. C++ 中构造来源于同一基类的多个派生类
答案与解析
答案:C
printf 是 C 语言传下来的库函数,面向过程;类成员函数、class/struct、派生继承都是面向对象特性。
干扰项思路:A/B/D 全是“类”相关操作,迷惑性在于让人以为 printf 和 cout 一样——cout 是对象(涉及),printf 是函数(不涉及)。
练习 25 · do-while 与 repeat-until¶
题目
下列不属于 C++ 循环语句的是( )
- A.
for - B.
while - C.
do-while - D.
repeat-until
答案与解析
答案:D
C++ 的三种循环是 for、while、do-while;repeat-until 是 Pascal 的语法,C++ 没有。
练习 26 · asm 与 register¶
题目
下列都是 C++ 关键字的一组是( )
- A.
asm、register、volatile - B.
assembler、register、volatile - C.
asm、reg、volatile - D.
asm、register、var
答案与解析
答案:A
asm(内嵌汇编)、register(寄存器建议)、volatile(禁优化)都是冷门关键字。
干扰项思路:B 的 assembler、C 的 reg、D 的 var 都不是——认准拼写,冷门关键字不缩写。
历年真题¶
2021 年 · 第 1 题¶
题目
以下不属于面向对象程序设计语言的是( )。
- A.
C++ - B.
Python - C.
Java - D.
C
答案与解析
答案:D
C 是面向过程语言,没有类与继承机制;C++、Java、Python 都支持面向对象。
2022 年 · 第 1 题¶
题目
以下哪种功能没有涉及 C++ 语言的面向对象特性支持: ( )。
- A. C++ 中调用
printf函数 - B. C++ 中调用用户定义的类成员函数
- C. C++ 中构造一个
class或struct - D. C++ 中构造来源于同一基类的多个派生类
答案与解析
答案:A
printf 是 C 标准库的函数,面向过程;B、C、D 分别对应成员方法、类定义、继承,都是面向对象特性。
2023 年 · 第 1 题¶
题目
在 C++ 中,下面哪个关键字用于声明一个变量,其值不能被修改?( )
- A.
unsigned - B.
const - C.
static - D.
mutable
答案与解析
答案:B
const = 常量限定:const int x = 5; 后再赋值即编译错误。static 管存储期与链接性,mutable 反向放行 const 成员,unsigned 只是无符号修饰。
2024 年 · 第 6 题¶
题目
以下哪个不是 C++ 中的基本数据类型?( )
- A.
int - B.
float - C.
struct - D.
char
答案与解析
答案:C
struct 是类型构造器(定义结构体),不是基本数据类型;int、float、char 都是。
2024 年 · 第 7 题¶
题目
以下哪个不是 C++ 中的循环语句?( )
- A.
for - B.
while - C.
do-while - D.
repeat-until
答案与解析
答案:D
C++ 只有 for、while、do-while 三种循环;repeat-until 是 Pascal 的循环语法。
易错小结¶
- 首字符不能是数字,
day3合法、3day非法; - 大小写敏感:
Int不是int,Main不是main——首字母大写就能“洗白”关键字拼写成合法标识符; main、cout、printf、NULL、include都不是关键字:函数名/库对象/宏/预处理指令不是保留字;sizeof、true、false、new、delete、this、and、or、not都是关键字:运算符型的关键字最容易漏判;- 关键字全部小写——见到全大写(
NULL、INT_MAX)可以直接判“不是关键字”(是宏); repeat-until是 Pascal 的,C++ 循环只有三种;- C 是面向过程,不属于面向对象语言。