• 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. 不同编译器有不同警告标准,因而不能依赖编译器来指出错误.

  • 相关阅读:
    consumer详解
    消费幂等
    死信队列
    消息重试
    负载均衡
    存储层
    producer消息
    消息发送与接收
    TCC
    form表单提交前进行加密
  • 原文地址:https://www.cnblogs.com/reasno/p/4804090.html
Copyright © 2020-2023  润新知