c++中的协变cv限定符适用于基本类型吗?

Do covariant cv-qualifiers apply to primitive types in C++?

本文关键字:适用于 类型 cv c++      更新时间:2023-10-16

在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;
};

协变cv-限定符是否适用于c++中的基本类型?

没有

§10.3.7虚函数

重写函数的返回类型要么与被重写函数的返回类型相同,要么与函数的类协变。如果函数D::f覆盖函数B::f函数的返回类型是协变的,如果它们满足以下条件:

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