zoukankan      html  css  js  c++  java
  • Effective C++ 条款53 不要轻忽编译器的警告

    1. 编译器的警告可能给出很重要的信息,例如:

    class B{
    public:
        virtual void f() const;
        ...
    };
    class D:public B{
    public:
        virtual void f();
        ...
    };

        由于B中的f是const成员函数,而D中的f是非const,因此D::f是对B::f的override而非重新声明,编译器通常会给出"warning: D:f() hides virtual B::f()"的警告,这个警告其实包含两层意思:

        1). D并没有重新声明virtual void f() const,因而它继承了B的virtual void f() const实现.

        2). 由于D声明了virtual void f(),它是对virtual void f() const的重写,由于名称遮掩,将不能通过D类型对象来调用virtual void f() const.

        因此,会出现以下情况(见注释):

    B b;
    D d;
    B* pb=&b;
    pb->f();    //调用的是B::f()
    pb=&d;
    pb->f();   //调用的仍然是B::f() !

    2. 不同编译器有不同警告标准,因而不能依赖编译器来指出错误.

  • 相关阅读:
    DB2数据库常用的函数总结
    word--->pdf资料转载..
    Spring boot -mongodb
    mongodb主从复制
    js-Math对象
    js-基本类型
    js-引用类型介绍
    js-检测数据类型
    javaScript计算对象的长度
    数据类型
  • 原文地址:https://www.cnblogs.com/reasno/p/4804090.html
Copyright © 2011-2022 走看看