【问题标题】:Overloaded functions with const and non-const return references具有 const 和非常量返回引用的重载函数
【发布时间】:2017-04-04 23:43:19
【问题描述】:

考虑以下代码:

#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 版本可以做的所有事情,non-const 版本也可以做?如何调用 GetX() 的 const 版本?在上述情况下,总是调用非常量版本。

【问题讨论】:

  • 函数重载不考虑返回类型。
  • 尝试制作yconst
  • 如果你只有一个 const 值怎么办?
  • 返回类型的 const 被忽略,cosnt char* 除外。打开你的警告编译器,你会看到它也告诉你

标签: c++


【解决方案1】:

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

如果你定义 y2 为 const,它会调用 const 方法。

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

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

    return 0;
}

【讨论】:

    猜你喜欢
    • 2021-08-10
    • 2020-07-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多