C++关键字汇总

在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

这里 ifconstexpr 一起构成了一个新的控制结构,但也算作新增关键字的一部分。另外还有 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标准

  1. asm:用于嵌入汇编语言代码。
  2. auto:自动存储类型说明符,通常用于局部变量,由编译器自动推断变量类型。
  3. bool :布尔数据类型,用于表示逻辑值 truefalse
  4. break :用于跳出循环(forwhiledo-while)或 switch 语句。
  5. case :在 switch 语句中,用于标记不同的分支。
  6. catch :用于捕获异常,与 try 语句一起使用。
  7. char:字符数据类型,用于存储单个字符。
  8. class:用于定义类,是面向对象编程的基本构建块。
  9. const:表示常量,用于修饰变量、函数参数等,使其值不可修改。
  10. const_cast:用于进行类型转换,去除对象的常量性。
  11. continue:用于跳过本次循环的剩余部分,直接进入下一次循环。
  12. default :在 switch 语句中,作为默认分支,当所有 case 都不匹配时执行。
  13. delete :用于释放由 new 运算符分配的内存。
  14. do :与 while 一起构成 do-while 循环,先执行循环体,再判断条件。
  15. double:双精度浮点数数据类型,用于存储带小数点的数值。
  16. dynamic_cast:用于在运行时进行安全的向下转型,主要用于多态类型之间的转换。
  17. else :与 if 语句一起使用,表示条件不成立时执行的分支。
  18. enum:用于定义枚举类型,是一种用户自定义的数据类型,包含一组命名常量。
  19. explicit:用于修饰构造函数,防止隐式类型转换。
  20. export:用于在模板定义中导出模板,使其可以在其他编译单元中使用。
  21. extern:用于声明外部变量或函数,指示编译器该变量或函数在其他地方定义。
  22. false:布尔常量,表示逻辑假。
  23. float:单精度浮点数数据类型,用于存储带小数点的数值。
  24. for:用于循环语句,常用于已知循环次数的情况。
  25. friend:用于声明友元函数或友元类,使它们能够访问类的私有成员。
  26. goto:无条件跳转语句,用于在程序中跳转到指定的标签处。
  27. if:条件判断语句,根据条件执行不同的代码块。
  28. inline:用于声明内联函数,建议编译器将函数体直接插入到调用处,以提高程序运行效率。
  29. int:整数数据类型,用于存储整数值。
  30. long:长整数数据类型,通常用于存储较大的整数值。
  31. mutable :用于修饰类的数据成员,即使在 const 成员函数中也可以修改该成员。
  32. namespace:用于定义命名空间,将程序中的标识符组织在不同的命名空间中,以避免命名冲突。
  33. new:用于动态分配内存,创建对象或数组。
  34. operator:用于定义运算符重载函数,允许对自定义类型使用标准运算符。
  35. private:类成员访问限定符,私有成员只能在类内部访问。
  36. protected:类成员访问限定符,受保护成员可以在类内部和派生类中访问。
  37. public:类成员访问限定符,公有成员可以在类外部访问。
  38. register:建议编译器将变量存储在寄存器中,以提高访问速度,但现代编译器会自动进行优化,该关键字使用较少。
  39. reinterpret_cast:用于进行重新解释类型转换,通常用于底层指针操作或不同数据类型之间的强制转换,但这种转换可能是不安全的。
  40. return:用于从函数返回值,并结束函数的执行。
  41. short:短整数数据类型,用于存储较小的整数值。
  42. signed:表示有符号的整数类型,可正可负。
  43. sizeof:用于获取数据类型或变量所占用的字节数。
  44. static:用于修饰变量或函数,具有不同的含义,如静态变量在程序的整个生命周期内存在,静态函数属于类而不属于对象。
  45. static_cast:用于进行静态类型转换,在编译时进行检查,用于较为安全的类型转换,如基本数据类型之间的转换、派生类到基类的转换等。
  46. struct:用于定义结构体,是一种用户自定义的数据类型,用于存储不同类型的数据成员。与类类似,但默认成员访问权限为公有。
  47. switch:用于多分支选择语句,根据表达式的值选择不同的分支执行。
  48. template:用于定义模板,包括函数模板和类模板,实现代码的泛型编程。
  49. this :在类的成员函数中,this 指针指向当前对象,用于访问对象的成员变量和成员函数。
  50. throw:用于抛出异常,用于在程序中表示出现了错误或异常情况。
  51. true:布尔常量,表示逻辑真。
  52. try :用于尝试执行一段可能会抛出异常的代码块,与 catch 一起用于异常处理。
  53. typedef:用于为已有的数据类型定义别名,提高代码的可读性和可维护性。
  54. typeid:用于获取对象的类型信息,在运行时确定对象的实际类型。
  55. typename:用于在模板定义中表示类型参数,告诉编译器后面跟着的是一个类型名。
  56. union:用于定义联合类型,是一种特殊的数据类型,它的所有成员共享同一块内存空间,同一时刻只能有一个成员有效。
  57. unsigned:表示无符号的整数类型,只能存储非负整数。
  58. using:有多种用途,如引入命名空间、定义类型别名等。
  59. virtual:用于声明虚函数,实现多态性,在派生类中可以重写虚函数。
  60. void:表示无类型,用于函数返回值、函数参数列表或指针类型,表示不指向任何具体的数据类型。
  61. volatile:用于修饰变量,告诉编译器该变量的值可能会在程序外部被修改,禁止编译器对该变量进行优化。
  62. wchar_t:宽字符数据类型,用于存储宽字符,通常用于处理Unicode字符。
  63. while:用于循环语句,只要条件为真,就会重复执行循环体。

C++11标准

  1. alignas:用于指定数据类型或对象的对齐方式。
  2. alignof:用于获取数据类型或对象的对齐要求。
  3. constexpr:用于声明常量表达式,在编译时就能计算出结果的表达式。
  4. decltype:用于推导表达式的类型。
  5. nullptr :表示空指针常量,用于替代传统的 NULL
  6. static_assert:用于在编译时进行断言检查,如果条件不满足,则编译失败。
  7. thread_local:用于声明线程局部存储变量,每个线程都有自己独立的变量副本。

C++17标准

  1. if constexpr:是一种编译时的条件判断,根据常量表达式的值在编译时选择执行不同的代码分支。
  2. inline :在C++17中,inline 函数可以在多个翻译单元中定义,但必须保证定义相同。这使得在头文件中定义函数时,可以更方便地使用 inline 来避免链接错误。

C++20标准

  1. concept:用于定义概念,是对模板参数的约束,用于指定模板参数必须满足的条件。
  2. consteval:用于声明立即函数,该函数必须在编译时被求值。
  3. constinit:用于声明变量,确保变量在初始化时被初始化为常量表达式。
  4. co_await:用于暂停协程的执行,等待一个可等待对象完成。
  5. co_return:用于从协程中返回值,并暂停协程的执行。
  6. co_yield:用于在协程中产生一个值,并暂停协程的执行,以便下次调用时继续从该点执行。
  7. requires :用于在模板定义中指定约束条件,类似于 concept,但更灵活。

C++23标准

  1. import:用于导入模块,是C++23中引入的新特性,用于替代传统的头文件包含。
  2. module:用于定义模块,将代码组织成模块,提高代码的可维护性和可重用性。
  3. reflexpr:用于获取表达式的反射信息,这是一个高级特性,用于在编译时获取关于程序元素的信息。
  4. sync:用于表示同步操作,例如在并发编程中用于确保某些操作的顺序执行。

这些关键字是C++语言的重要组成部分,理解它们的含义和用法对于编写高效、正确的C++代码至关重要。

相关推荐
froxy2 小时前
C++11 引入了的新特性与实例说明
开发语言·c++
珊瑚里的鱼2 小时前
第一讲 | 解锁C++编程能力:基础语法解析
开发语言·c++·笔记·visualstudio·学习方法·visual studio
程序员yt2 小时前
211 本硕研三,已拿 C++ 桌面应用研发 offer,计划转音视频或嵌入式如何规划学习路线?
c++·学习·音视频
剑海风云2 小时前
JVM常见概念之条件移动
jvm·条件移动
黄名富2 小时前
深入探究 JVM 堆的垃圾回收机制(一)— 判活
java·jvm
ling__wx2 小时前
JVM常见面试总结
java·jvm
进击的_鹏3 小时前
【C++】多态
开发语言·c++
Aurora_wmroy4 小时前
算法竞赛备赛——【数据结构】链表
数据结构·c++·算法·链表·蓝桥杯
ん贤4 小时前
单调栈详解【C/C++】
数据结构·c++·算法·贪心算法·单调栈
C++ 老炮儿的技术栈5 小时前
vector和list的区别是什么
开发语言·c++·笔记·学习