C++关键字 | ||||
---|---|---|---|---|
alignas | continue | friend | register | true |
alignof | decltype | goto | reinterpret_cast | try |
asm | default | if | return | typedef |
auto | delete | inline | short | typeid |
bool | do | int | signed | typename |
break | double | long | sizeof | union |
case | dynamic_cast | mutable | static | unsigned |
catch | else | namespace | static_assert | using |
char | enum | new | static_cast | virtual |
char16_t | explicit | noexcept | struct | void |
char32_t | export | nullptr | switch | volatile |
class | extern | operator | template | wchar_t |
const | false | private | this | while |
constexpr | float | protected | thread_local | |
const_cast | for | public | throw |
注:C++11中有73个关键字,其中红色标注为C语言中的32个关键字。
- C语言的关键字共有32个,根据关键字的作用,可分其为数据类型关键字、控制语句关键字、存储类型关键字和其它关键字四类。
- 数据类型关键字(12个)
char: 声明字符型变量或函数
double: 声明双精度变量或函数
float:声明浮点型变量或函数
int: 声明整型变量或函数
long:声明长整型变量或函数
short: 声明短整型变量或函数
signed: 声明有符号类型或函数
unsigned: 声明无符号类型变量或函数
enum: 声明枚举类型
struct: 声明结构体变量或函数
union: 声明共用体(联合)数据类型
void: 声明函数无返回值或无参数,声明无类型指针
- 控制语句关键字
- A循环语句
for: for循环语句关键字
do: do while 循环语句关键字
while do while 或者 while 循环语句关键字
break: 跳出当前循环
continue: 结束当前循环,开始下一轮循环
- B条件语句
if: 条件语句
else:条件语句否定分支(与if连用)
goto: 无条件跳转语句
- C开关语句
switch: 用于开关语句
case: 开关语句分支
default: 默认case处理的语句(所有case不满足时执行)
- D返回语句
return: 子程序返回语句(可以带参数,也可以不带参数)
- 存储类型关键字(4个)
auto: 自动类型说明符(让编译器自动去分析表达式所属的类型)
extern: 声明其它文件变量而非定义它(也可以看作是引用变量)
register: 声明寄存器变量(变量存在CPU内部寄存器中,而不是通过内存寻址访问)
static: 声明静态变量或函数(静态函数只能在本源文件中使用)
- 其它关键字(4个)
const: 声明只读变量
sizeof: 计算数据类型长度
typedef: 给已经存在的类型起别名
volatile: volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,告诉编译器对该变量不做优化,都会直接从变量内存地址中读取数据,从而可以提供对特殊地址的稳定访问。
C++中其它关键字的解释:
- alignas: alignas关键字用来设置内存中对齐方式,最小是8字节对齐,可以是16,32,64,128等。
- friend: friend关键字用于声明类的友元,友元可以直接访问其属性。无论是public/protected/private,友元函数或者友元类都可以访问。
- bool、true、false: bool即为布尔类型,属于基本类型中的整数类型,取值为真和假。true和false是具有布尔类型的字面量,为右值,即表示真和假。
- alignof: alignof得到字节对齐后的字节数.
- decltype、auto: auto关键字是在编译时通过已经初始化的变量来确定auto所代表的类型, decltype的类型推导并不是像auto一样是从变量声明的初始化表达式获得变量的类型,而是总是以一个普通表达式作为参数,返回该表达式的类型,而且decltype并不会对表达式进行求值。
- reinterpret_cast:reinpreter_cast (expression), type-id 必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。
- try、catch、throw: try语句块是用来判断是否有异常;catch语句块捕捉异常,并进行处理;throw是抛出异常;
- asm: asm是一个语句的分隔符。不能单独出现,必须接汇编指令,一组被大括号包含的指令或一对空括号。
- delete、new: new、delete属于操作符,可以被重载。new表示向内存申请一段新的空间,申请失败会抛出异常。new会先调用operator new函数,再在operator new函数里调用malloc函数分配空间,然后再调用构造函数。delete不仅会清理资源,还会释放空间。delete先调用析构函数,其次调用operator delete函数,最后在operator delete函数里面调用free函数。malloc申请内存失败会返回空。free只是清理了资源,并没有释放空间。
- inline: inline(内联)函数的定义将在编译时在调用处展开。inline 函数一般由短小的语句组成,可以提高程序效率。
- typeid: typeid运算符用来查询一个变量的类型,这种类型查询在运行时进行。RTTI机制为每一个类型产生一个type_info类型的数据,而typeid查询返回变量的相应type_info数据,通过name成员函数返回类型的名称。
- typename: "typename"是一个C++程序设计语言中的关键字。当用于泛型编程时是另一术语"class"的同义词。这个关键字用于指出模板声明(或定义)中的非独立名称(dependent names)是类型名,而非变量名。
- dynamic_cast:dynamic_cast(动态转换),允许在运行时刻进行类型转换,从而使程序能够在一个类层次结构安全地转换类型。dynamic_cast 提供了两种转换方式,把基类指针转换成派生类指针,或者把指向基类的左值转换成派生类的引用。
- namespace:关键字namespace允许你创建一个新的空间.名字由你选择,忽略创建没有命名的名字空间。
- static_assert: static_assert ( 布尔常量表达式 , 消息 ),static_assert是编译期间断言的,所以第一个参数必须是常量。如果布尔常量表达式为真,则static_assert无作用;如果布尔常量表达式为假,则它就会发布一个编译时的错误,错误的提示就是第二个参数。
- using:在当前文件中引入命名空间;在子类中使用 using 声明引入基类成员名称。
- static_cast:
static_cast < type-id > ( expression )
该运算符把 expression 转换为 type-id 类型,但没有运行时类型检查来保证转换的安全性。
- virtual:关键字virtual 能用来创建虚函数,派生类可以不重写此函数.但是假如函数被作为一个纯的虚函数 (被=0表示)时, 这种情况一定要重写此函数,不然无法构造对象,变成抽象类。
virtual return-type name( parameter-list );
virtual return-type name( parameter-list ) = 0;
- char、wchar_t、char16_t、char32_t:
- char(字符,character)类型,C++ 中的基本数据结构,其值一般为 0~255 的 int。这 256 个字符对应着 256 个 ASCII 码。char 类型的数据需要用单引号 ’ 括起来。
- wchar_t 是宽字符类型,每个 wchar_t 类型占 2 个字节,16 位宽。汉字的表示就要用到 wchar_t。
- 类型 char16_t 和 char_32_t 则为 Unicode 字符集服务(Unicode 是用于表示所有自然语言中字符的标准)。
- explicit:阻止隐式转换的发生。
- noexcept:
- noexcept 标识符有几种写法: noexcept、noexcept(true)、noexcept(false)、noexcept(expression)、throw()。
其中 noexcept 默认表示 noexcept(true)。
当 noexcept 是 true 时表示函数不会抛出异常,当 noexcept 是 false 时表示函数可能会抛出异常。
throw()表示函数可能会抛出异常, 不建议使用该写法, 应该使用 noexcept(false), 因为 C++20 放弃这种写法.- noexcept 函数用来检查一个函数是否声明了 noexcept, 如果声明了noexcept(true)则返回true, 如果声明了noexcept(false)则返回false.
- export: 为了访问其他编译单元(如另一代码文件)中的变量或对象,对普通类型(包括基本数据类、结构和类),可以利用关键字 extern,来使用这些变量或对象时;但是对模板类型,则必须在定义这些模板类对象和模板函数时,使用标准 C++ 新增加的关键字 export(导出)。
- class: class(类)是 C++ 面向对象设计的基础。使用 class 关键字声明一个类。
- operator:operator(操作符)用于操作符重载。这是 C++ 中的一种特殊的函数。
- template: template(模板),C++ 中泛型机制的实现。
- private、public: private(私有的),C++ 中的访问控制符。被标明为 private 的字段只能在本类以及友元中访问。public(公有的),C++ 中的访问控制符。被标明为 public 的字段可以在任何类。
- this: this 返回调用者本身的指针。
- const、constexpr: 表示常数表达式。与 const 相同,它可应用于变量,因此如果任何代码试图修改该值,均将引发编译器错误。与 const 不同,constexpr 也可应用于函数和类构造函数。 constexpr 指示值或返回值是常数,并且如果可能,将在编译时计算值或返回值。
- protected:protected(受保护的),C++ 中的访问控制符。被标明为 protected 的字段只能在本类以及其继承类和友元中访问。
- thread_local:有且只有thread_local关键字修饰的变量具有线程周期(thread duration),这些变量(或者说对象)在线程开始的时候被生成(allocated),在线程结束的时候被销毁(deallocated)。
- const_cast:
const_cast<type_id> (expression)
该运算符用来修改类型的 const 或 volatile 属性。除了 const 或 volatile 修饰之外, type_id 和 expression 的类型是一样的。常量指针被转化成非常量指针,并且仍然指向原来的对象;常量引用被转换成非常量引用,并且仍然指向原来的对象;常量对象被转换成非常量对象。