协变虚函数返回类型问题

6pa*_*kid 3 c++ virtual inheritance covariance

我有以下代码:

#include <iostream>
using namespace std;

class Child1
{
    int i;
};

class Child2 : public Child1
{
    int j;
};

class Base1
{

public:

    virtual Child1& getChildren()
    {
        cout << "Children1" << endl;
        return children;
    }

private:

    Child1 children;
};

class Base2 : public Base1
{

public:

    virtual Child2& getChildren()
    {
        cout << "Children2" << endl;
        return children;
    }

private:

    Child2 children;
};
Run Code Online (Sandbox Code Playgroud)

此代码编译正常,但当我改变的返回类型getChildren()从引用类型中的一个或两个object类型Base1Base2(例如virtual Child2 getChildren(),我得到的Visual Studio 2010以下错误:

error C2555: 'Base2::getChildren': overriding virtual function return type differs and is not covariant from 'Base1::getChildren'
Run Code Online (Sandbox Code Playgroud)

我想知道为什么我在使用引用时没有得到这个错误,否则就得到它.这是VS2010中的错误吗?因为C++标准(根据微软网站上的这个页面)说的是:重写函数的返回类型应该与重写函数的返回类型相同或者与函数类的协变相同.并且返回类型为B :: f的类与D :: f的返回类型中的类相同,或者是D :: f的返回类型中类的明确的直接或间接基类.并可在D.访问

PS我目前无法访问该标准,因此无法验证上述报价.

MSa*_*ers 15

你错过了他们援引另一部分:"如果一个函数d :: F覆盖函数B ::男,如果满足以下条件的返回类型的功能是协变:(1)两者都是指针,以类或引用来班"