博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++中命名强制类型转换
阅读量:5810 次
发布时间:2019-06-18

本文共 948 字,大约阅读时间需要 3 分钟。

在C++中有四种命名强制类型转换:const_cast、static_cast、dynamic_cast和reinterpret_cast。对C++中的强制类型转换讲得比较清楚。

1. const_cast

    const_cast用于将const类型转换为非const类型,例如:

const char *str = "hello";char *p = const_cast
(str);

2. static_cast和dynamic_cast

    这两种cast功能相似,但是static_cast没有动态检查的功能,而dynamic_cast有动态检查的功能。

3. reinterpreter_cast

    例子:

int a;char *c = reinterpret_cast
(a);

4. 一个小例子的分析

class A{    int a;public:    A(){        a = 0;    }};class AA:public A{    int aa;public:    AA(){        aa = 0;    }    virtual int get_aa(){ //如果没有这个虚函数,那么下面的dynamic_cast无法编译通过        return aa;    }};class B{    int b;public:    B(){        b = 0;    }};int main(){    A *x;    AA *y;    B *z;    static_cast(y);  //向上转换    //static_cast(y); //无法编译通过    dynamic_cast(y); //运行时转换的结果是NULL    reinterpret_cast(x); //reinterpret_cast比较粗暴    return 0;}

 设计得当的话,强制类型转换是可以避免的。应当尽量不要使用强制类型转换。

转载于:https://www.cnblogs.com/richardustc/archive/2013/01/28/2880594.html

你可能感兴趣的文章
Squid 反向代理服务器配置
查看>>
Java I/O操作
查看>>
Tomcat性能调优
查看>>
项目管理心得
查看>>
Android自学--一篇文章基本掌握所有的常用View组件
查看>>
灰度图像和彩色图像
查看>>
通过vb.net 和NPOI实现对excel的读操作
查看>>
TCP segmentation offload
查看>>
java数据类型
查看>>
数据结构——串的朴素模式和KMP匹配算法
查看>>
FreeMarker-Built-ins for strings
查看>>
验证DataGridView控件的数据输入
查看>>
POJ1033
查看>>
argparse - 命令行选项与参数解析(转)
查看>>
一维数组
查看>>
Linux学习笔记之三
查看>>
Floyd最短路算法
查看>>
Class.forName(String name)方法,到底会触发那个类加载器进行类加载行为?
查看>>
CentOS 6.6 FTP install
查看>>
C#------判断btye[]是否为空
查看>>