使用const和非const返回引用重载函数

时间:2017-04-04 23:43:19

标签: c++

请考虑以下代码:

#include <cstdio>

struct X
{
    int a;
};

struct Y
{
    X x;

    X& GetX()
    {
        printf("non-const version\n");
        return x;
    }

    X const& GetX() const
    {
        printf("const version\n", __FUNCTION__);
        return x;
    }
};

int main()
{
    Y y;

    X& i = y.GetX();
    X const& j = y.GetX();

    return 0;
}

在Code :: Blocks 16.01中运行时,我得到:

non-const version
non-const version

我经常在我工作的地方看到这样的代码,你在那里重载了具有不同返回类型的函数。一个是参考,另一个是常量参考。

我的问题是:这种编码的用途或好处是什么,如果const版本可以做的一切,非const版本也可以做到?如何调用GetX()的const版本?在上面的例子中,总是调用非const版本。

1 个答案:

答案 0 :(得分:0)

y是非const变量。所以调用非const方法。

如果将y2定义为const,则会调用const方法。

int main()
{
    Y y;
    const Y y2 = y;

    X i = y.GetX();
    const X& j = y2.GetX();

    return 0;
}