C++关键字解释

alignas关键字:用来设置内存中对齐方式,最小是8字节对齐,可以是16,32,64,128等。

                             用法:struct alignas(8) 结构体名称{...}

friend关键字:修饰的函数或类称为友元函数或友元类。

         友元函数格式为:friend 类型 函数名(形式参数);友元函数是可以直接访问类的私有成员的非成员函数。

                           友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)

                           友元函数格式为:friend class 类名;

register关键字:请求编译器尽可能的将变量存在CPU内部寄存器,而不是通过内存寻址访问,以提高效率。如果定义了很多register变量,可能会超过CPU的寄存器个数,超过容量,所以只是尽可能。

             用法:register 类型 变量名

alignas关键字:作用是将类型作为参数,并返回一个整数,指出要求的对齐方式。

                              格式:alignof(类型)//包括内置类型、类等

decltype关键字:选择并返回操作数的数据类型,编译器分析表达式并得到它的类型,但不计算表达式的值。如果要初始化就用auto关键字。

                              格式:decltype(A) B;//A定义为int A,此时变量B的类型为int;

reinterpret_cast关键字:强制类型转换符。

                                               格式:reinterpret_cast<type-id> (expression),type-id 必须是一个指针、引用、算术类型、函数指针或者成员指针。

                                               例如:int *n= new int ;

                                                           double *d=reinterpret_cast<double*> (n);//在进行计算以后, d 包含无用值. 这是因为 reinterpret_cast 仅仅是复制 n 的比特位到 d, 没有进行必要的分析。
static_cast和reinterpret_cast的区别主要在于多重继承。
static_cast关键字:把一个表达式转换为某种类型,但没有运行时类型检查来保证转换的安全性。
                                     格式:static_cast <type-id>( expression );//编译器隐式执行任何类型转换都可由static_cast显示完成;reinterpret_cast通常为操作数的位模式提供较低层的重新解释。
asm关键字:用于在C++源码中内嵌汇编语言,格式:__asm关键字启动内联汇编并且能写在任何C++合法语句之处。它不能单独出现,必须接汇编指令、一组被大括号包含的指令或一对空括号。术语“__asm 块”在这里是任意一个指令或一组指令无论是否在括号内。
例如:

以下代码片段是在括号内的一个简单的__asm块。

_asm { mov al, 2  mov dx, 0xD007 out al, dx }

另一种方法是,你可以在每个汇编指令前放置__asm
__asm mov al, 2
__asm mov dx, 0xD007

__asm out al, dx

因为__asm关键字是一个语句分隔符,你也可以将汇编指令放在同一行。

__asm mov al, 2 __asm mov dx, 0xD007 __asm out al, dx。

一般使用括号括起来,用于和c++语言分开。

typedef关键字:用来重新命名一个数据类型,这里指的数据类型包括基本内置数据类型如int ,char,double等和结构数据类型struct等。

格式:typedef  类型  名称

auto关键字:auto可以在声明变量的时候根据变量初始值的类型自动为此变量选择匹配的类型。

格式:auto  a=b;//b定义为int b = 10;

typeid 关键字:获取一个表达式是类型,返回表达式的类型,表达式可以是类型名称、变量名、数字、字符串、指针、结构体等。

格式:typeid(a);//a定义为int a;使用typeid(a).name()获取int。

Typename关键字:告诉编译器把一个特殊的名字解释成一个类型。

格式:template <typename T>

dynamic_cast关键字运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用。

格式:Base* pbase = new Inherit();

            Inherit* pInherit = dynamic_cast<Inherit*>(pbase);

mutable关键字:mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。

static_assert关键字:简单来说就是在编译时进行断言判断. 如果条件不满足, 编译停止并输出指定错误信息。

格式:static_assert(constant_expression, string_literal);//constant_expression为判断表达式,string_literal为判断条件的解释。

static_cast关键字:强制类型转换。

格式:static_cast< new_type >(expression)

virtual关键字:用于修饰虚函数或虚基类。

explicit关键字:用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的。关键字implicit用于隐式的。默认情况下是隐式的。

noexcept关键字:该关键字告诉编译器,函数中不会发生异常,这有利于编译器对程序做更多的优化。

volatile关键字:使用volatile指每次从内存中读取数据,而不是从编译器优化后的缓存中即寄存器中读取数据,简单来讲就是防止编译器优化。

operator关键字:一是操作符的重载,一是自定义对象类型的隐式转换。

template 关键字:用于作为模板声明之外,还有一个作用,显式说明模板成员函数。

格式:template<typename(或class) T>

          <返回类型><函数名>(參数表)

          { 函数体 }

constexpr关键字:constexpr修饰的函数,简单的来说,如果其传入的参数可以在编译时期计算出来,那么这个函数就会产生编译时期的值。但是,传入的参数如果不能在编译时期计算出来,那么constexpr修饰的函数就和普通函数一样了。const并未区分出编译期常量和运行期常量
constexpr限定在了编译期常量。

thread_local 关键字:使用 thread_local 说明符声明的变量仅可在它在其上创建的线程上访问。 变量在创建线程时创建,并在销毁线程时销毁。 每个线程都有其自己的变量副本。

const_cast关键字:是用来移除变量的const或volatile限定符。

throw关键字:C++函数后面加关键字throw(something)限制,是对这个函数的异常安全性作出限制。

posted @ 2021-01-30 09:15  嗨_放飞梦想  阅读(502)  评论(0编辑  收藏  举报