【发布时间】: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++