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.
  • 相关阅读:
    服务部署 RPC vs RESTful
    模拟浏览器之从 Selenium 到splinter
    windows程序设计 vs2012 新建win32项目
    ubuntu python 安装numpy,scipy.pandas.....
    vmvare 将主机的文件复制到虚拟机系统中 安装WMware tools
    ubuntu 修改root密码
    python 定义类 简单使用
    python 定义函数 两个文件调用函数
    python 定义函数 调用函数
    python windows 安装gensim
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3816254.html
Copyright © 2011-2022 走看看