Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 1

static_cast

·static_cast 是静态强制转换
·任何具有明确定义的类型转换都可以使用 static_cast
·能够实现 C++任何标准类型之间的转换
·所有隐式转换都能通过 static_cast 实现
int i = 3, j = 5;
double rst = static_cast<double>(j) / i;
·使用 static_cast 编译器会把警告信息关闭
·如把一个 long long 类型的字面值常量赋值给一个 int 类型的变量:
int i = static_cast<int>(1234567890123);//long long 类型的常量

const_cast
·const_cast 是常量强制转换
·用于强制转换 const 或 volatile(可变)的数据
·要求 const 限制
·是一种将常量对象转换成非常量对象的行为
·去掉对象的 const 限制后编转换前后的数据类型必须相同
·用来删除数据的译器将不再阻止对该对象的写操作
NOTE
·如果对象本身不是一个常量,使用强制类型转换获得写权限是合法的行为。
·如果对象是一个常量,再使用 const_cast 执行写操作就会产生未定义的结果。
·const_cast<int&>(x) = x * x; //删除 const 限制,可以修改 x

reinterpret_cast
·reinterpret_cast 称为重解释强制转换
·通常为运算对象的位模式提供较低层次上的重新解释
·能够完成互不相关的数据类型之间的转换,
如将整型转换成指针,或把一个指针转换成与之不相关的另一种类型的指针
·reinterpret_cast 其实是按照强制转换所指定的类型对要转换数据对应的内存区域进行重新
定义
·使用 reinterpret_cast 非常危险,可能导致异常的运行时行为

dynamic_cast
·dynamic_cast 称为动态强制转换
·只能用来转换指针或引用
·它能够把一种类型的指针或引用转换成另一种类型的指针或引用
·dynamic_cast 用于转换继承结构中类对象的指针或引用
·主要用于把指向基类对象的指针(引用)转换成指向派生类对象的指针(引用),以实现
多态(见第 6 章)。

You might also like