一、C++ prime plus内容
15.5 类型转换运算符 p649
Stroustrop严格的限制允许的类型转换:
- dynamaic_cast
- const_cast
- static_cast
- reinterpret_cast
dynamic_cast
用途:类层次结构中的向上转换,而不允许其他转换。
const_cast
用途:执行只有一种用途的类型转换,将改变值为const或volatile。有时需要这样一个值,在大多数情况下为常量,但有时又可以修改。在这种情况下,可以将这个值声明为const,并在需要修改他的时候修改他。
static_cast
static<type_name>(expression)
用途:仅仅当type_name可被隐式转换为expression所属类型或expression可被隐式转为type_name的类型才合法。
补充:p411 11.6类的自动转换和强制类型转换
reinterpret_cast
重点:
- 如果两种类型兼容,C++会自动讲这个值转换为接收变量的类型。
- C++不自动转换不兼容的类型。
- 无法自动转换时,可使用强制类型转换。
- 只有接收一个参数的构造函数才可以转为转换函数,如果多个参数而提供默认值,则也可以转换。
- explict将关闭隐式转换,但仍可以进行显式类型转换。
- 构造函数只用于某种类型到类类型的转换。
- 转换函数是用户定义的强制类型转换。
explict代码示例:
//Stonuewt.h类中定义 explict
explict Stonewt(double lbs);
//Stonewt.cpp
int main(){
//...
Stonewt myCat;
myCat=19.6;//error
myCat=Stone(19.6);//ok 显式转换
}
创建转换函数:
operator ty