c++关键字:
1. mutable
为了打破c++函数const限制而出现的一个关键字。mutable修饰的变量表示可变的,在被const修饰的类成员函数中,不能改变类中的所有数据成员,但如果某个数据成员确实和const无关,需要改变,可以将这个数据成员用mutable来修饰。
2. explicit
一般用在构造函数中,指明构造函数不能发生隐式类型转换。
3. export
- 通常使用extern对于跨编译单元的变量和对象进行引用,但是对于模板类型来说,通常声明和定义都在头文件中,因为当实例化一个模板时,编译器必须看到模板确切的定义,而不仅仅是它的声明。
- 另外一个方法就是使用关键字“export”!你可以在.h文件中,声明模板类和模板函数;在.cpp文件中,使用关键字export来定义具体的模板类对象和模板函数;然后在其他用户代码文件中,包含声明头文件后,就可以使用该这些对象和函数了(模板分离编译模式(Separation Model))
- export关键字在C++11前用于标注一个模板定义被导出,这允许在其他翻译单元中申明,但不定义同一模板。C++11后 不使用,并保留该关键字。
export参考2
export参考
export的讨论
4. volatile
- 易变性。所谓的易变性,在汇编层面反映出来,就是两条语句,下一条语句不会直接使用上一条语句对应的volatile变量的寄存器内容,而是重新从内存中读取。volatile的这个特性,相信也是大部分朋友所了解的特性。
- 不可优化。volatile告诉编译器,不要对我这个变量进行各种激进的优化,甚至将变量直接消除,保证程序员写在代码中的指令,一定会被执行。
- 顺序性。C/C++ Volatile变量,与非Volatile变量之间的操作,是可能被编译器交换顺序的。
volatile的探索
5. register
register修饰后的变量会尽可能的放到寄存器中,每次取值尽量在寄存器而非内存中取值。
参考
c++和c关于register的比较
6. typeid
是一个运行时类型识别(RTTI(Run-Time Type Identification))的操作符,返回一个type_info结构体,结构体中的name函数返回当前变量的类型,需要包含 #include <typeinfo>。