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

Bri*_*sey 7 c++ const covariance

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

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

class Derived : public Base {
    Base* f() override;
};
Run Code Online (Sandbox Code Playgroud)

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

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

class Derived : public Base {
    int* f() override;
};
Run Code Online (Sandbox Code Playgroud)

bil*_*llz 6

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

没有

§10.3.7虚函数

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

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