码迷,mamicode.com
首页 > 其他好文 > 详细

staitc_cast,const_cast....

时间:2014-06-30 15:38:28      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   os   代码   

#include <iostream>
using namespace std;
int main()
{
    //1.const_cast
    //const int a = 10;
    //int* ptr = const_cast<int*>(&a);//将const属性去除
    //*ptr = 100;

    //2.static_cast
    //编译器隐式执行的操作都可以由static_cast显示完成,显示的强制类型转换会产生警告,当使用static_cast会关闭警告
    //static_cast就是基本的类型转换
    double dNum = 12.2356;
    void* ptr = &dNum;
    //double* dp = static_cast<double*>(ptr);//这个是c++标准的形式
    double* dp = (double*)ptr;//c语言的强制转换,效果和上一句一样

    //3.reinterpret_cast 我到底要看看这个是干啥的
    //根据二进制位进行重新解释,看这个没啥意义吧

    //4.dynamic_cast有时间再看一下
    getchar();
    return 0;
}

//一个区别static_cast和reinterpret_cast的例子
reinterpret_cast是为了映射到一个完全不同类型的意思,这个关键词在我们需要把类型映射回原有类型时用到它。我们映射到的类型仅仅是为了故弄玄虚和其他目的,这是所有映射中最危险的。(这句话是C++编程思想中的原话)
    static_cast和reinterpret_cast的区别主要在于多重继承,比如
class A {
public:
    int m_a;
};

class B {
public:
    int m_b;
};

class C : public A, public B {};
那么对于以下代码:
    C c;
printf("%p, %p, %p", &c, reinterpret_cast<B*>(&c), static_cast <B*>(&c));
前两个的输出值是相同的,最后一个则会在原基础上偏移4个字节,这是因为static_cast计算了父子类指针转换的偏移量,并将之转换到正确的地址(c里面有m_a,m_b,转换为B*指针后指到m_b处),而reinterpret_cast却不会做这一层转换。
    因此, 你需要谨慎使用 reinterpret_cast.

 

staitc_cast,const_cast....,布布扣,bubuko.com

staitc_cast,const_cast....

标签:style   blog   color   使用   os   代码   

原文地址:http://www.cnblogs.com/zzyoucan/p/3816254.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!