协变cv限定符是否适用于C ++中的原始类型?

时间:2014-03-19 10:19:55

标签: c++ const covariance

在C ++中,减少派生类中返回类型的cv限定符是有效的:

class Base {
    virtual const Base* f();
};

class Derived : public Base {
    Base* f() override;
};

这对指向原始类型的指针是否有效?

class Base {
    virtual const int* f();
};

class Derived : public Base {
    int* f() override;
};

1 个答案:

答案 0 :(得分:6)

协变cv限定符是否适用于C ++中的原始类型?

  

§10.3.7虚拟功能

     

重写函数的返回类型应与重写函数的返回类型相同或与函数类的协变相同。如果函数D::f覆盖函数B::f函数的返回类型如果满足以下条件则是协变的:

     
      
  • 都是指向类的指针,都是左值引用   类或两者都是对类的右值引用
  •   
  • 返回类型B::f中的类与类相同   在返回类型D::f中,或者是明确且可访问的   返回类型D::f
  • 中类的直接或间接基类   
  • 指针或引用都具有相同的cv资格和   返回类型为D::f
  • 的类类型