首页 > 代码库 > C++学习笔记29:运行期型式信息2
C++学习笔记29:运行期型式信息2
static_cast
静态转型的用途
- 与dynamic_cast不同,static_cast不仅可以用于指针和引用,还可以用于其他型式
- 一般用于非类型式的普通数据对象转型
静态转型的问题
- 不进行运行期型式检查,不安全
- 若转型失败,结果无定义
const_cast
常量转型的目的
- 用于取消或者设置量的const状态(如设置为const或者取消const)
常量转型的问题
- 如果原始数据对象不能写入,则取消常量修饰可能会导致未知的结果
例子:
#include <iostream> class ConstCastTest { public: void SetNum(int num) { _num = num; } void PrintNum() const; private: int _num; }; void ConstCastTest::PrintNum() const { //临时取消常量约束,修改目标对象的内容 //this指向const ConstCastTest*,指向常对象的指针 const_cast<ConstCastTest*>(this)->_num--; std::cout << _num; }
reinterpret_cast
复诠转型的目的
- 将任意型式的数据对象转型为目标型式,即重新解释其位序列的意义
- 可以用于整型与指针型的互转
复诠转型的问题
- 由程序员保证重新解释的数据对象是否有意义,编译器简单按照目标型式理解该存储区的内容
- 注意:在64位操作系统中,指针可能为64位,而整型可能为32位,复诠转型有可能丢失数据或者得到错误结果
例子:
#include <iostream> using namespace std; int f(void *p) { unsigned int n = reinterpret_cast<unsigned int>(p); return n; } int main() { int a[8] = { 1,2,3,4,5,6,7,8 }; int n = f(a); cout << n << endl; }
C++学习笔记29:运行期型式信息2
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。