• 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.
  • 相关阅读:
    香港两日游的那些事儿
    香港两日游的那些事儿
    Node.js下的Hello World
    Node.js下的Hello World
    Node.js下的Hello World
    WP SyntaxHighlighter 初探
    WP SyntaxHighlighter 初探
    WP SyntaxHighlighter 初探
    Google的代码高亮-code-prettify
    Java 18套JAVA企业级大型项目实战分布式架构高并发高可用微服务电商项目实战架构
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3816254.html
Copyright © 2020-2023  润新知