在C++里,保留关键字是被语言本身赋予特定含义的单词,程序员不能将它们用作自定义的标识符(像变量名、函数名等)。根据不同的C++标准,保留关键字的数量有所不同。
C++98/03标准
C++98是首个国际标准化的C++版本,C++03是对C++98的小幅度修订,二者的关键字基本一致,共有63个保留关键字,列举如下:
asm auto bool break case
catch char class const const_cast
continue default delete do double
dynamic_cast else enum explicit export
extern false float for friend
goto if inline int long
mutable namespace new operator private
protected public register reinterpret_cast return
short signed sizeof static static_cast
struct switch template this throw
true try typedef typeid typename
union unsigned using virtual void
volatile wchar_t while
C++11标准
C++11带来了许多新特性,同时新增了一些保留关键字,总共达到73个。新增的关键字如下:
alignas alignof constexpr decltype nullptr
static_assert thread_local
C++14标准
C++14是C++11的增量更新版本,并未新增保留关键字,依然是73个。
C++17标准
C++17进一步发展了C++语言,又新增了3个保留关键字,使总数变为76个。新增关键字如下:
if constexpr
这里 if
和 constexpr
一起构成了一个新的控制结构,但也算作新增关键字的一部分。另外还有 inline
(这里的 inline
在新语义下可看作新增用法)。
C++20标准
C++20引入了不少重要特性,新增了11个保留关键字,关键字总数达到87个。新增关键字如下:
concept consteval constinit co_await co_return
co_yield requires
C++23标准
C++23在C++20基础上继续发展,新增了4个保留关键字,总共拥有91个保留关键字。新增关键字如下:
import module reflexpr sync
C++中各保留关键字的意义:
C++98/03标准
asm
:用于嵌入汇编语言代码。auto
:自动存储类型说明符,通常用于局部变量,由编译器自动推断变量类型。bool
:布尔数据类型,用于表示逻辑值true
或false
。break
:用于跳出循环(for
、while
、do-while
)或switch
语句。case
:在switch
语句中,用于标记不同的分支。catch
:用于捕获异常,与try
语句一起使用。char
:字符数据类型,用于存储单个字符。class
:用于定义类,是面向对象编程的基本构建块。const
:表示常量,用于修饰变量、函数参数等,使其值不可修改。const_cast
:用于进行类型转换,去除对象的常量性。continue
:用于跳过本次循环的剩余部分,直接进入下一次循环。default
:在switch
语句中,作为默认分支,当所有case
都不匹配时执行。delete
:用于释放由new
运算符分配的内存。do
:与while
一起构成do-while
循环,先执行循环体,再判断条件。double
:双精度浮点数数据类型,用于存储带小数点的数值。dynamic_cast
:用于在运行时进行安全的向下转型,主要用于多态类型之间的转换。else
:与if
语句一起使用,表示条件不成立时执行的分支。enum
:用于定义枚举类型,是一种用户自定义的数据类型,包含一组命名常量。explicit
:用于修饰构造函数,防止隐式类型转换。export
:用于在模板定义中导出模板,使其可以在其他编译单元中使用。extern
:用于声明外部变量或函数,指示编译器该变量或函数在其他地方定义。false
:布尔常量,表示逻辑假。float
:单精度浮点数数据类型,用于存储带小数点的数值。for
:用于循环语句,常用于已知循环次数的情况。friend
:用于声明友元函数或友元类,使它们能够访问类的私有成员。goto
:无条件跳转语句,用于在程序中跳转到指定的标签处。if
:条件判断语句,根据条件执行不同的代码块。inline
:用于声明内联函数,建议编译器将函数体直接插入到调用处,以提高程序运行效率。int
:整数数据类型,用于存储整数值。long
:长整数数据类型,通常用于存储较大的整数值。mutable
:用于修饰类的数据成员,即使在const
成员函数中也可以修改该成员。namespace
:用于定义命名空间,将程序中的标识符组织在不同的命名空间中,以避免命名冲突。new
:用于动态分配内存,创建对象或数组。operator
:用于定义运算符重载函数,允许对自定义类型使用标准运算符。private
:类成员访问限定符,私有成员只能在类内部访问。protected
:类成员访问限定符,受保护成员可以在类内部和派生类中访问。public
:类成员访问限定符,公有成员可以在类外部访问。register
:建议编译器将变量存储在寄存器中,以提高访问速度,但现代编译器会自动进行优化,该关键字使用较少。reinterpret_cast
:用于进行重新解释类型转换,通常用于底层指针操作或不同数据类型之间的强制转换,但这种转换可能是不安全的。return
:用于从函数返回值,并结束函数的执行。short
:短整数数据类型,用于存储较小的整数值。signed
:表示有符号的整数类型,可正可负。sizeof
:用于获取数据类型或变量所占用的字节数。static
:用于修饰变量或函数,具有不同的含义,如静态变量在程序的整个生命周期内存在,静态函数属于类而不属于对象。static_cast
:用于进行静态类型转换,在编译时进行检查,用于较为安全的类型转换,如基本数据类型之间的转换、派生类到基类的转换等。struct
:用于定义结构体,是一种用户自定义的数据类型,用于存储不同类型的数据成员。与类类似,但默认成员访问权限为公有。switch
:用于多分支选择语句,根据表达式的值选择不同的分支执行。template
:用于定义模板,包括函数模板和类模板,实现代码的泛型编程。this
:在类的成员函数中,this
指针指向当前对象,用于访问对象的成员变量和成员函数。throw
:用于抛出异常,用于在程序中表示出现了错误或异常情况。true
:布尔常量,表示逻辑真。try
:用于尝试执行一段可能会抛出异常的代码块,与catch
一起用于异常处理。typedef
:用于为已有的数据类型定义别名,提高代码的可读性和可维护性。typeid
:用于获取对象的类型信息,在运行时确定对象的实际类型。typename
:用于在模板定义中表示类型参数,告诉编译器后面跟着的是一个类型名。union
:用于定义联合类型,是一种特殊的数据类型,它的所有成员共享同一块内存空间,同一时刻只能有一个成员有效。unsigned
:表示无符号的整数类型,只能存储非负整数。using
:有多种用途,如引入命名空间、定义类型别名等。virtual
:用于声明虚函数,实现多态性,在派生类中可以重写虚函数。void
:表示无类型,用于函数返回值、函数参数列表或指针类型,表示不指向任何具体的数据类型。volatile
:用于修饰变量,告诉编译器该变量的值可能会在程序外部被修改,禁止编译器对该变量进行优化。wchar_t
:宽字符数据类型,用于存储宽字符,通常用于处理Unicode字符。while
:用于循环语句,只要条件为真,就会重复执行循环体。
C++11标准
alignas
:用于指定数据类型或对象的对齐方式。alignof
:用于获取数据类型或对象的对齐要求。constexpr
:用于声明常量表达式,在编译时就能计算出结果的表达式。decltype
:用于推导表达式的类型。nullptr
:表示空指针常量,用于替代传统的NULL
。static_assert
:用于在编译时进行断言检查,如果条件不满足,则编译失败。thread_local
:用于声明线程局部存储变量,每个线程都有自己独立的变量副本。
C++17标准
if constexpr
:是一种编译时的条件判断,根据常量表达式的值在编译时选择执行不同的代码分支。inline
:在C++17中,inline
函数可以在多个翻译单元中定义,但必须保证定义相同。这使得在头文件中定义函数时,可以更方便地使用inline
来避免链接错误。
C++20标准
concept
:用于定义概念,是对模板参数的约束,用于指定模板参数必须满足的条件。consteval
:用于声明立即函数,该函数必须在编译时被求值。constinit
:用于声明变量,确保变量在初始化时被初始化为常量表达式。co_await
:用于暂停协程的执行,等待一个可等待对象完成。co_return
:用于从协程中返回值,并暂停协程的执行。co_yield
:用于在协程中产生一个值,并暂停协程的执行,以便下次调用时继续从该点执行。requires
:用于在模板定义中指定约束条件,类似于concept
,但更灵活。
C++23标准
import
:用于导入模块,是C++23中引入的新特性,用于替代传统的头文件包含。module
:用于定义模块,将代码组织成模块,提高代码的可维护性和可重用性。reflexpr
:用于获取表达式的反射信息,这是一个高级特性,用于在编译时获取关于程序元素的信息。sync
:用于表示同步操作,例如在并发编程中用于确保某些操作的顺序执行。
这些关键字是C++语言的重要组成部分,理解它们的含义和用法对于编写高效、正确的C++代码至关重要。