zoukankan      html  css  js  c++  java
  • 注意类型转换——Effective C++

    注意类型转换:

    C++提供了四种新式类型转换:

    const_cast<T>(expression);
    static_cast<T>(expression);
    dynamic_cast<T>(expression);
    reinterpret_cast<T>(expression);
    

    static_cast 和 旧式转换

    在编程中我们经常使用强制类型转换,尤其是在竞赛中int不够的时候

    int a = 100;
    double x = (double)a;
    

    static_cast和它差不多,只是能够让人们更清晰地识别出它是一个强制类型转换


    类中的类型转换:

    class Window{
    public:
        virtual void onResize(){……};
        ……
    };
    class specialWindow:public Window{
    public:
        virtual void onResize(){
            static_cast<Window>(*this).onResize();//将this转为Window,然后调用。这样其实不行。
            ……
        }
    };
    

    这段代码中,使用了转型动作,我们所预期的是将this转为Window,之后调用Window::onResize。但实际上并不是这样,static_cast(*this).onResize()所调用的是暂时副本身上的onResize()。如果onResize中修改了数据,并不会作用在当前的对象。
    最好还是使用域操作符::


    dynamic_cast:

    可以实现向下的转换,但是效率很低
    如果你使用dynamic_cast的地方可以用虚函数多态替代,最好还是用虚函数。


    参考:

    《Effective C++》
    《C++Primer 5》

  • 相关阅读:
    codeforces 985 F. Isomorphic Strings
    Educational Codeforces Round 44
    codeforces 979D
    ARC060 Digit Sum II
    Iroha and Haiku II
    Unhappy Hacking II
    Just h-index 2018湘潭邀请赛
    [HAOI2007]理想的正方形
    P1231 教辅的组成
    最小割数学形式
  • 原文地址:https://www.cnblogs.com/Przz/p/6627897.html
Copyright © 2011-2022 走看看