请考虑以下代码:
#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版本。
答案 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;
}