C++ 一些关键字的解释

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会报编译错误。

你可能感兴趣的:(C++)