关键字列表
关键字 | 说明与用法 | 举例 |
---|---|---|
alignas | 用于声明:指示类型的对齐要求(只能更严格)。 structclass alignas(表达式类型) 类名 { 成员列表 }; |
|
alignof | 用于运算符:查询类型的对齐要求。C++ 要求任何类型必须对齐到内存中 2 的整数次幂个字节数。 alignof(类型) |
|
and | 用于运算符: 左侧操作数 and 右侧操作数 |
|
and_eq | 用于运算符: 左侧操作数 and_eq 右侧操作数 |
|
asm | 其它:嵌入汇编语言。对于不同编译环境规则不同。 asm(字符串字面量) |
|
atomic_cancel | (实验性功能)用于事务:声明原子块且可被取消。 atomic_cancel 复合语句 |
|
atomic_commit | (实验性功能)用于事务:声明原子块且抛出异常。 atomic_commit 复合语句 |
|
atomic_noexcept | (实验性功能)用于事务:声明原子块且遇异常正常提交。 atomic_noexcept 复合语句 |
|
auto | 1. 用于声明:自动推导类型声明符。对于变量,将通过初始化值推导其类型;对于函数,将通过return语句推导其返回类型。对于模板形参,通过实参推导其类型。 auto&&& 声明符 初始化器; decltype(auto) 声明符 初始化器; |
|
2. 用于声明:声明结构化绑定。 auto&&& [标识符列表] 元组初始化器; |
| |
bitand | 用于运算符: 左侧操作数 bitand 右侧操作数 |
|
bitor | 用于运算符: 左侧操作数 bitor 右侧操作数 |
|
bool | 用于声明:布尔类型变量的类型说明符。 bool 变量名 初始化器; |
|
break | 用于控制成分:break 语句跳出当前 for、while、do-while 或 switch 语句。 break;
|
|
case | 用于控制成分:在switch语句中,作为语句标号确定入口。 case 常量: 语句 |
|
catch | 用于异常处理:捕获异常并处理。 try 复合语句 catch (声明序列...) 复合语句 |
|
char | 用于声明:字符类型变量的类型说明符。 char 变量名 初始化器; |
|
char8_t | 用于声明:UTF-8 字符类型变量的类型说明符。 char8_t 变量名 初始化器; |
|
char16_t | 用于声明:UTF-16 字符类型变量的类型说明符。 char16_t 变量名 初始化器; |
|
char32_t | 用于声明:UTF-32 字符类型变量的类型说明符。 char32_t 变量名 初始化器; |
|
class | 1. 用于声明:声明默认为私有成员的类类型。 class 类名 { 成员列表 }; |
|
2. 用于声明:声明有作用域枚举类型。 enum classstruct 枚举名 { 枚举项列表 }; |
| |
3. 用于模板:用于引入类型模板形参,与 template <classtypename 类型形参> 声明 |
| |
compl | 用于运算符: compl 操作数 |
|
concept | 用于约束:定义一个概念(又称约束集合)。 template <模板形参列表> concept 概念名 = 约束表达式; |
|
const | 1. 用于声明:限定变量只读。 const 类型说明符 变量名 初始化器; |
|
2. 用于声明:限定成员函数对成员只读。 返回类型 函数名(形参列表) const; |
| |
consteval | 1. 用于声明:指示函数为即时函数(Immediate Function),即每次调用必须在产生编译期常量。 consteval 返回类型 函数名(形参列表); |
|
2. 用于元编程:判断当前语境是否为常量求值。 if !consteval 真分支复合语句 else 假分支复合语句 |
| |
constexpr | 1. 用于声明:指示函数或者变量的值可以用于常量表达式。对于变量,限定为只读的。 constexpr 类型说明符 变量名 初始化器; constexpr 返回类型 函数名(形参列表); |
|
2. 用于元编程:表明 if 语句含义为条件编译而非条件运行。 if constexpr (常量表达式) 真分支语句 else 假分支语句 |
| |
constinit | 用于声明:指示变量的初始化必须为静态初始化(零初始化或者常量初始化),但不限定为只读的。 constinit 类型说明符 变量名 初始化器; |
|
const_cast | 用于运算符:对于指针和引用进行转换,可以移除常量性。 const_cast<新类型>(指针或引用) |
|
continue | 用于控制成分:continue 语句用于跳过 for、while 或 do-while 的剩余部分。 continue;
|
|
co_await | 用于协程:此运算符暂停当前协程直至等待体恢复。 co_await 等待体 |
|
co_return | 用于协程:此语句完成协程执行,并返回一个值。 co_return 返回值; |
|
co_yield | 用于协程:此运算符暂停当前协程并返回一个值。 co_yield 操作数 |
|
decltype | 1. 用于声明等:检查实体或表达式的类型。 decltype(实体) decltype(表达式) |
|
2. 用于声明:配合auto说明符,保留引用语义。 decltype(auto) 变量名 初始化器; |
| |
default | 1. 用于控制成分:在switch语句中,作为语句标号确定默认入口。 default: 语句 |
|
2. 用于声明:显示声明预置成员函数(默认构造函数、复制构造函数、移动构造函数、赋值运算符、析构函数和三路比较运算符)。 返回类型 函数名(形参列表) = default; |
| |
delete | 1. 用于运算符:释放 new 表达式分配的指针所指向的内存。 delete 指针 delete[] 指针 |
|
2. 用于声明:声明成员函数被弃置 返回类型 函数名(形参列表) = delete; |
| |
do | 用于控制成分:形成do-while循环。 do 语句 while (表达式); |
|
double | 用于声明:双精度浮点类型变量的类型说明符。 double 变量名 初始化器; |
|
dynamic_cast | 用于运算符:将指向类的指针(引用)沿继承层级安全地转换到其它类的指针(引用)。若转型失败,返回空指针。(若为引用,抛出异常。) dynamic_cast<新类型>(指针或引用) |
|
else | 用于控制成分。形成 if 语句的假分支。 if (条件) 真分支语句 else 假分支语句 |
|
enum | 用于声明:声明枚举类型。 enum classstruct 枚举名 :基 { 枚举项列表 }; |
|
explicit | 用于声明:限制构造函数为显式,即不能用于隐式转换和复制初始化。可后接常量表达式,当常量表达式为true时为显式。 explicit 构造函数名(形参列表); explicit(常量表达式) 构造函数名(形参列表); |
|
export | 用于模块:标记一个声明或一个模块被当前模块导出。 export module 模块名; export 声明; |
|
extern | 1. 用于声明:声明对象具有静态存储期和外部连接;即在其它文件中寻找对象的定义。 extern 类型说明符 变量名; |
|
2. 其它:用于连接其它语言编写的代码。一般只支持C语言。 extern 字符串字面量 { 声明序列 }声明 |
| |
3. 用于模板:显式实例化声明类模板,但跳过隐式实例化步骤;即在其它文件中寻找实例化定义。 extern template classstruct 模板名模板实参列表; |
| |
false | 用于数据成分:表示假的布尔类型字面值。 false
|
|
float | 用于声明:单精度浮点类型变量的类型说明符。 float 变量名 初始化器; |
|
for | 1. 用于控制成分:形成for循环语句。 for (初始语句 条件表达式; 迭代表达式) 语句 |
|
2. 用于控制成分:形成基于范围的for循环语句。范围可以是数组或容器等。 for (范围声明 : 范围表达式) 语句 |
| |
friend | 用于声明:声明函数或类为友元函数或友元类。友元函数和友元类可以访问其它类中的私有成员。 friend 函数声明 friend 类名; |
|
goto | 用于控制成分:goto语句可无条件跳转到对应标号的语句。 goto 标号; |
|
if | 用于控制成分:if语句形成简单的分支流程。 if constexpr (初始化语句 条件表达式) 真分支语句 else 假分支语句 |
|
inline | 1. 用于声明:声明函数或变量为内联的。内联的声明可以容许多次等同的定义;对于内联函数可能会优先内联而不跳转(这是已经被标准抛弃的说法,但仍然适用)。 inline 函数或对象声明 |
|
2. 用于命名空间:声明命名空间为内联的,即该命名空间的成员如同视为外层命名空间的成员。 inline namespace 命名空间名 { 声明序列 } |
| |
int | 用于声明:基础有符号整数类型变量的类型说明符,或者作为其它整型变量的类型说明符的部分。 int 变量名 初始化器; |
|
long | 用于声明:有符号长整型变量的类型说明符,或者作为其它整型变量的类型说明符的部分。 long 变量名 初始化器; |
|
mutable | 1. 用于声明:容许包含该对象的对象被声明为只读时仍可修改。 mutable 类型说明符 变量名 初始化器; |
|
2. 用于 Lambda 表达式:允许 Lambda 表达式函数体修改复制捕获的实参。 [捕获](参数列表) mutable -> 返回类型 函数体 |
| |
namespace | 1. 用于命名空间:建立命名空间或引入命名空间,从而避免命名冲突。 inline namespace 命名空间名 { 声明序列 } using namespace 命名空间名; |
|
2. 用于命名空间:创立命名空间别名。 namespace 别名 = 命名空间名; |
| |
new | 用于运算符:创建并初始化具有动态存储期的对象,返回指向该对象的指针或者指向数组首元素的指针。 new 类型 初始化器; new 类型长度初始化器; |
|
noexcept | 1. 用于声明:指示该函数不会抛出异常,从而编译时优化。可后随常量表达式,当表达式为 true 时不会抛出异常。 返回类型 函数名(形参列表) noexcept; 返回类型 函数名(形参列表) noexcept(常量表达式); |
|
2. 用于运算符:检查表达式是否可能抛出异常。若不可能,返回 true ;否则返回 false。该运算符不对表达式求值。 noexcept(表达式) |
| |
not | 用于运算符: not 操作数 |
|
not_eq | 用于运算符: 左侧操作数 not_eq 右侧操作数 |
|
nullptr | 用于数据成分:空指针字面量,可与其余类型指针隐式或显式转换。 nullptr
|
|
operator | 用于声明:声明重载运算符。 返回类型 operator运算符 (形参列表); |
|
or | 用于运算符: 左侧操作数 or 右侧操作数 |
|
or_eq | 用于运算符: 左侧操作数 or_eq 右侧操作数 |
|
private | 用于面向对象:指明其后的成员为私有成员,或者指明该类为私有继承。 private:
classstruct 类名 : private 父类名 { 成员列表 }; |
|
protected | 用于面向对象:指明其后的成员为受保护成员,或者指明该类为受保护继承。 protected:
classstruct 类名 : protected 父类名 { 成员列表 }; |
|
public | 用于面向对象:指明其后的成员为公有成员,或者指明该类为受公开继承。 public:
classstruct 类名 : public 父类名 { 成员列表 }; |
|
reflexpr | (实验性功能)用于反射。获取某个类型的反射元类型。(元类型是指包含这个类的元数据的类型,如类型名、成员列表元组等。) reflexpr(reflexpr操作数) |
|
register | (此关键字被保留,暂时不使用。) |
|
reinterpret_cast | 用于运算符:将指针的基类型重解释为新的基类型。 reinterpret_cast<新类型>(指针) |
|
requires | 1. 用于概念:requires 子句对模板实参或函数声明指定一个约束,这个约束可以是概念(约束集合)或者它们的合取、析取或原子约束,或者一个 requires 表达式。 template<模板形参列表> requires requires子句 声明 template<模板形参列表> 函数声明 requires requires子句 |
|
2. 用于概念:requires表达式构造一个约束。 requires (形参列表) { 要求序列 } |
| |
return | 用于函数:终止当前函数。若可能,则返回值给上级函数。 return 表达式; |
|
short | 用于声明:有符号短整型变量的类型说明符,或者作为其它整型变量的类型说明符的部分。 short 变量名 初始化器; |
|
signed | 用于声明:基础有符号整数类型的类型说明符,或者作为其他有符号整型变量的类型说明符的部分。 signed 变量名 初始化器; |
|
sizeof | 1. 用于运算符:sizeof 运算符查询操作数或类型的大小。它是不求值运算符。 sizeof(类型) sizeof 操作数 |
|
2. 用于运算符:sizeof... 运算符查询形参包所含的元素数量。 sizeof...(形参包) |
| |
static | 1. 用于声明:声明全局变量具有静态存储期和内部连接,即仅能在本文件中使用。 static 类型说明符 变量名 初始化器; |
|
2. 用于声明:声明局部变量具有静态存储期,即内存分配时段与程序本身相同,仅初始化一次。 static 类型说明符 变量名 初始化器; |
| |
3. 用于声明:声明静态成员,即该成员不绑定到类的实例,为所有该类对象共有。 static 成员或函数声明 |
| |
static_assert | 其它:进行编译期断言检查。若常量表达式为真则不执行操作,否则编译错误并提示字符串字面量的内容(若有)。 static_assert(常量表达式, 字符串字面量); |
|
static_cast | 用于运算符:进行显式类型转换,但不能移除指针或引用的 const 或 volatile 限定。任意隐式转换均可用词运算符显式转换。亦存在到 void 或 void 的指针的转换、整数类型和枚举类型的转换。 static_cast<类型>(操作数) |
|
struct | 1. 用于声明:声明默认为公有成员的类类型,即结构体类型。 struct 类名 { 成员列表 }; |
|
2. 用于声明:声明有作用域枚举类型。 enum classstruct 枚举名 { 枚举项列表 }; |
| |
switch | 用于控制成分:switch语句形成多分支结构。 switch (初始语句 表达式) { 带case或default标号的语句 } |
|
synchronized | (实验性功能)用于事务:指明复合语句为同步块,即如同在全局锁下执行。 synchronized 复合语句 |
|
template | 用于模板:声明模板。可以是类模板、函数模板、别名模板、变量模板或者概念。 template<形参列表> requires子句 类、变量或函数声明 template<形参列表> using 别名 = 类型标识; template<形参列表> concept 概念名 = 约束表达式; |
|
this | 1. 用于面向对象:非静态成员函数中可使用的一个指针,指向当前正在调用成员函数的对象。对于允许 this
|
|
2. 用于面向对象:显式给出隐含的 *this 参数。 返回值类型 成员函数名(this 类型说明符 参数名, 其它参数); |
| |
thread_local | 用于声明:声明对象具有线程存储期。对象的存储在线程开始时分配,而在线程结束时解分配。 thread_local 类型说明符 变量名 初始化器; |
|
throw | 用于运算符:将表达式复制并作为异常抛出,或者重新抛出当前正在处理的异常。 throw 表达式 |
|
true | 用于数据成分:表示真的布尔类型字面值。 true
|
|
try | 用于异常处理:关联一个复合语句使得其中的异常可以被处理。 try 复合语句 catch (声明序列...) 复合语句 |
|
typedef | 用于声明:创建替代类型名的别名,但不能是模板名。此声明将声明符的名字作为类型的别名。 typedef 类型名 声明符; |
|
typeid | 用于运算符:查询类型的信息,或者操作数的类型的信息,返回std::type_info对象,可以通过name()成员函数获取类型名。对于部分编译环境,此结果可能需要用 c++filt 进行转译。 typeid(类型) typeid(表达式) |
|
typename | 1. 用于模板:在模板声明中用以引入类型模板形参,与class等价。 template <classtypename 类型形参> 声明 |
|
2. 用于模板:在模板声明中指明某个待决名为类型,以区别于静态成员变量,防止编译错误。 typename 待决名余下声明; |
| |
3. 用于概念:在 requires 表达式的要求中,用于校验类型名是否合法。 typename 类型名 |
| |
union | 用于声明:声明联合体,即一个时刻只能保有一个非静态数据成员的类型。 union 联合体名 { 成员列表 }; |
|
unsigned | 用于声明:基础无符号整数类型的类型说明符,或者作为其他无符号整型变量的类型说明符的部分。 unsigned 变量名 初始化器; |
|
using | 1. 用于命名空间:引入命名空间或者命名空间中的对象。 using namespace 命名空间名; using 标识符列表; |
|
2. 用于声明:用于创建指代类型名的别名,与typedef类似。亦可以创建别名模板。 using 别名 = 类型标识; template<形参列表> using 别名 = 类型标识; |
| |
virtual | 1. 用于面向对象:声明成员函数为虚函数,即在多态场景下,其可以被子类成员同名函数所覆盖。亦可声明为纯虚函数,则该类成为抽象类且不得有实例。 virtual 返回类型 函数名(形参列表)[ = 0]; |
|
2. 用于面向对象:声明继承方式为虚继承,即在多重继承中,最终派生对象只有一个基类成员。 classstruct 类名 : virtual privateprotectedpublic 父类名 { 成员列表 }; |
| |
void | 1. 用于声明:空类型的类型说明符。空类型是值的集合为空集的类型,不存在空类型的对象,但存在指向空类型的指针和返回空类型的函数。 void* 指针名; void 函数名(形参列表); |
|
volatile | 1. 用于声明:声明该变量只为易变的,即它的值可能会以某些不可检测的方式发生改变。因此此类变量每次修改将读写内存而非寄存器,且避免编译器进行优化。 volatile 类型说明符 变量名 初始化器; |
|
2. 用于声明:声明成员函数为易变的,即它所访问的成员的值可能会以某些不可检测的方式发生改变。 返回类型 函数名(形参列表) volatile; |
| |
wchar_t | 用于声明:宽字符类型变量的类型说明符。宽字符类型是长度足够表示当前环境任何可编码字符的类型。在Linux中,一般为32位长度,但在Windows中为16位长度。 wchar_t 变量名 初始化器; |
|
while | 用于控制成分:形成while循环。 while (条件) 语句 |
|
xor | 用于运算符: 左侧操作数 xor 右侧操作数 |
|
xor_eq | 用于运算符: 左侧操作数 xor_eq 右侧操作数 |
|
以下名字是有特殊含义的标识符:它们和关键字一样在特定场合有特殊含义,但可以用做变量名(尽管并不建议)。
标识符 | 说明与用法 | 举例 |
---|---|---|
override | 用于面向对象:指定某子类函数必将覆盖基类中的虚函数。 返回类型 成员函数名(形参列表) override; |
|
final | 用于面向对象:指定该类不可继承。 classstruct 类名 final { 成员列表 }; |
|
import | 用于模块:导入一个模块。也兼容将一个头文件作为模块导入。 import 模块名; import <头文件>; |
|
module | 用于模块:声明一个模块实现单元(Module Implementation Unit)或者模块接口单元(Module Interface Unit)。 export module 模块名; |
|
用于模块:开始全局模块片段。 module : private; |
| |
transaction_safe | (实验性功能)用于事务:声明某函数为事务安全的。 返回类型 函数名(形参列表) transaction_safe; |
|
transaction_safe_dynamic | (实验性功能)用于事务:声明某虚函数为事务安全的,即它的最终覆盖函数也是事务安全的。 virtual 返回类型 函数名(形参列表) transaction_safe_dynamic; |
|