跳转至

标识符与关键字

方法速览

任务 方法 口诀
判断标识符合法性 只能由字母、数字、下划线组成;第一个字符不能是数字 字母下划线打头,数字不点头
大小写 SumsumSUM三个不同的标识符 严格区分大小写
关键字 全部小写、不能作标识符;maincoutNULL 不是关键字 关键字是保留字,库名不是
冷门关键字 sizeoftruefalseandornot 都是关键字 替代运算符也是关键字

标识符与命名规则

标识符(identifier)是程序员给变量、函数、数组、类型等起的名字。

命名规则(三条全满足才合法):

  • 只能由字母a~zA~Z)、数字0~9)、下划线_)组成;
  • 第一个字符不能是数字——sum2 合法,2sum 非法;
  • 不能与关键字重名——int for; 编译错误。

三条细则:

  • 大小写敏感SumsumSUM 是三个不同的标识符,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++ 严格区分大小写,SumsumSUM 是三个不同的标识符,合法共存。

干扰项思路: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. intcoutfor
  • B. whileprintfstruct
  • C. ifelsesizeof
  • D. cinendlreturn
答案与解析

答案:C

ifelsesizeof 都是关键字;coutcinendl 是标准库标识符,printf 是库函数——要 #include 才能用,都不是关键字。

干扰项思路:每组都混入一个“每天都在用、但不是关键字”的库名字。

练习 8 · NULL 的身份

题目

NULL 是( )

  • A. C++ 关键字
  • B. 预处理宏,不是关键字
  • C. 库函数
  • D. 命名空间
答案与解析

答案:B

NULL<cstdio> 等头文件里定义的宏,展开后通常是 0nullptr。关键字全小写,全大写的一律不是关键字。

干扰项思路: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

题目

关于 truefalse,说法正确的是( )

  • A. 它们是普通变量名
  • B. 它们是宏,需要 #include 才能使用
  • C. TrueFalse 也是关键字
  • 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

andornotxorbitandbitorcomplnot_eq 等都是 C++ 关键字,是 &&||!^&|~!=替代写法

干扰项思路:A 想当然认为只有符号写法。

练习 13 · 替代运算符配对

题目

关键字 bitandbitorcompl 依次等价于( )

  • A. &&||!
  • B. &|~
  • C. ^&|
  • D. &|!
答案与解析

答案:B

bitand = 位与 &bitor = 位或 |compl = 取反 ~;注意与 and&&)、or||)、not!)区分——带 bit 的是位运算。

练习 14 · new 和 delete

题目

下列关于 newdelete 的说法正确的是( )

  • 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

usingnamespace 都是关键字;std 是标准库命名空间的名字(标识符)。

干扰项思路:D 借“最眼熟的名字”设陷阱。

练习 17 · goto 与 continue

题目

下列都属于流程控制类关键字的一组是( )

  • A. breakcontinuegoto
  • B. breakrepeatgoto
  • C. exitcontinuereturn
  • D. stopwhilefor
答案与解析

答案:A

三个都是跳转/循环控制关键字。

干扰项思路:B 的 repeat、D 的 stop 根本不是 C++ 关键字(Pascal 有 repeat-until,C++ 没有);C 的 exit 是库函数。

练习 18 · 关键字全小写

题目

下列都是 C++ 关键字的一项是( )

  • A. IFElseWHILE
  • B. ifelsewhile
  • C. Ifelsewhile
  • D. ifELSEWhile
答案与解析

答案:B

关键字全部小写,任何大写变形(IFElse)都只是普通标识符。

练习 19 · 下划线开头

题目

下列标识符中,合法的是( )

  • A. 9var
  • B. my var
  • C. my-var
  • D. __my_var
答案与解析

答案:D

下划线开头(含双下划线)语法上合法。B 含空格、C 含减号、A 数字开头。

练习 20 · 合法性综合

题目

以下四项中全部合法的一组标识符是( )

  • A. x1x_1_x
  • B. 1xx1x-1
  • C. intIntINT
  • D. a.ba ba,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++ 中构造一个 classstruct
  • 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++ 的三种循环是 forwhiledo-whilerepeat-until 是 Pascal 的语法,C++ 没有。

练习 26 · asm 与 register

题目

下列都是 C++ 关键字的一组是( )

  • A. asmregistervolatile
  • B. assemblerregistervolatile
  • C. asmregvolatile
  • D. asmregistervar
答案与解析

答案: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++ 中构造一个 classstruct
  • 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 不是 intMain 不是 main——首字母大写就能“洗白”关键字拼写成合法标识符;
  • maincoutprintfNULLinclude 都不是关键字:函数名/库对象/宏/预处理指令不是保留字;
  • sizeoftruefalsenewdeletethisandornot 都是关键字:运算符型的关键字最容易漏判;
  • 关键字全部小写——见到全大写(NULLINT_MAX)可以直接判“不是关键字”(是宏);
  • repeat-until 是 Pascal 的,C++ 循环只有三种;
  • C 是面向过程,不属于面向对象语言。