auto
在C++98/03中这个这个关键字用于声明块中的变量的生存期为自动生存期,
这个关键字不常用,因为即便省略,声明的默认就是auto的。
在C++11中,auto的含义改变为自动通过初值符推断声明的类型占位符。
也可以使用auto& i等声明,具体推导规则同模版参数类型推导。
typeid
typeid(obj)返回的是type_info的一个引用,可以用typeid(obj).name()获取类型名字。
这里有可能抛异常,如果是一个badtype,也就是说typeid有可能是RTTI的。
其中RTTI(Run-Time Type Identification,通过运行时类型识别)
使用RTTI技术的还有dynamic_cast。
explicit
这个关键字修饰构造函数声明,表示显式构造函数(模版),显式构造函数不参与特定的重载。
C++11从两个角度扩展了用法。其一是适用于转换函数(模版),类似构造函数,避免不需要的重载。
其二是列表初始化,除非直接使用std::initializer_list,显式构造函数被列表初始化忽略。
(在C++98/03中,explicit仅对单一参数调用构造函数有意义,这里打破了这个限制)
register
被视为过时的(可能在未来标准移除)。
volatile
指定被修饰的对象类型的读操作是副作用(因此读取不能被随便优化合并,适合映射I/O寄存器等)。
即被修饰的对象有可能在其他地方被修改。
static_cast
C式的强制类型转换
reinterpre_cast
从一种类型重新解释到另一种类型,按二进制流截取
dynamic_cast(try it)
子类指针或引用到基类的转换,利用虚函数表使用rtti技术达到目的,
所以如果没有虚函数表支持或者直接是两个不相关的类进行dynamic_cast会报编译错误。