协变cv限定符是否适用于C++;? 在C++中,减少派生类中返回类型的CV限定符是有效的: class Base { virtual const Base* f(); }; class Derived : public Base { Base* f() override; };
这对指向基元类型的指针有效吗协变cv限定符是否适用于C++;? 在C++中,减少派生类中返回类型的CV限定符是有效的: class Base { virtual const Base* f(); }; class Derived : public Base { Base* f() override; };,c++,constants,covariance,C++,Constants,Covariance,这对指向基元类型的指针有效吗 class Base { virtual const int* f(); }; class Derived : public Base { int* 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的返回类型中的类类型
有什么理由认为这是无效的吗?或者这只是一个疏忽?