在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;
};
答案 0 :(得分:6)
协变cv限定符是否适用于C ++中的原始类型?
否强>
§10.3.7虚拟功能
重写函数的返回类型应与重写函数的返回类型相同或与函数类的协变相同。如果函数
D::f
覆盖函数B::f
,函数的返回类型如果满足以下条件则是协变的:
- 都是指向类的指针,都是左值引用 类或两者都是对类的右值引用
- 返回类型
中类的直接或间接基类B::f
中的类与类相同 在返回类型D::f
中,或者是明确且可访问的 返回类型D::f
- 指针或引用都具有相同的cv资格和 返回类型为
的类类型D::f