zoukankan      html  css  js  c++  java
  • staitc_cast,const_cast....

    #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.
  • 相关阅读:
    一个回车键黑掉一台服务器——使用Docker时不要这么懒啊喂
    docker machine介绍和使用
    Docker Engine和Docker Machine介绍
    Nginx服务器之负载均衡策略
    从linux启动到rootfs的挂载分析
    Docker容器的生命周期管理
    docker的使用
    automake,autoconf使用详解
    go语言中文网中的资源
    Go工具和调试详解
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3816254.html
Copyright © 2011-2022 走看看