C++关键字

new :1.申请空间,无需指定分配空间大小,编译器根据类型自行计算;2.申请成功时返回对象的指针类型,无需强制类型转换,是类型安全的操作符;3.申请失败抛出 bad_alloc 异常;4.对于自定义的类型,new 首先调用 operator new()函数申请空间(底层通过malloc)实现,然后调用构造函数进行初始化,最后返回自定义类型的指针;5.从自由存储区上为对象动态分配内存;
malloc :1.申请空间,需要指定所申请空间的大小;2.申请成功返回 void* 类型,需要强制类型转换为对象类型的指针;3.申请失败返回空指针;4.从堆上动态分配内存
delete :1.首先调用析构函数,然后调用 operator delete() 释放空间(底层通过free实现);
free :1.无法进行自定义类型对象的析构;
class :1.默认访问级别 private, 默认继承级别 private;2.派生 struct 级别为 public(取决于派生类)
struct :1.成员之间相互独立;2.内存分配遵循内存对齐原则;3.默认访问级别 public , 默认继承级别 public;4.派生 class 的访问类别为 private
union :1.只有一个有效成员,赋值时会覆盖其他成员的值;2按最大类型的倍数分配,内部所有变量的最大值

访问权限 public protected private
对本类 可见 可见 可见
对子类 可见 可见 不可见
对外部(调用) 可见 不可见 不可见

volatile :1.当对象的值可能在程序的控制或检测之外被改变时,应该将对象声明为 volatile ,告知编译器不应该对这样的对象进行优化;2.不具有原子性(一条或多条指令,要么执行成功,要么执行失败,不存在个别指令成功,个别指令失败的情况);3.使用该关键字之后,编译器不会对相应的对象进行优化,不会将变量从内存缓存到寄存器中,防止多个线程有可能使用内存中的变量,有可能使用寄存器中的变量,导致程序错误(当多个线程都会用到某一变量,且该变量的值有可能发生改变时,需要用volatile进行修饰);4.中断服务程序中访问的变量或并行设备的硬件寄存器的变量,最好用该关键字修饰;5.可以和const一起用(如驱动中访问外部设备的只读寄存器)
extern C :1.C++要调用C的函数,因为两者编译函数签名方式不一样,c因为没有重载,编译时只保留函数名,C++编译时保留函数名和参数类型,使用该关键字是让C++函数当做C函数处理,避免因符号修饰导致代码不能和C语言库中的符号进行链接的问题。
auto :1.编译器根据初始值来推算变量类型,使用auto 定义变量时必须有初始值;2.编译器推断出的类型可能与初始值类型不一致,编译器会适当改变结果类型使其更符合初始化原则。
final :使用该关键字修饰的类不能被继承(class A final {}; )
mutable :修饰变量,使之可更改,即使是const成员函数
virtual :

你可能感兴趣的:(语法,c++,语音识别)