笔者看到的原文地址:仅返回类型不同的函数,在C++中如何实现重载?,不知是否真原文地址。原作者看到请联系笔者以更换链接地址。
文末作者抛出了一个问题:
对于仅返回类型不同的类的重载成员函数,什么时候会调用const版本?
笔者这里做出解答:
只读对象会调用const版本的重载函数。
理论依据如下:
只读对象const
1 对只读对象只能调用只读函数,不能调用非只读函数.对于非只读对象,即可以调用非只读函数,也可以调用只读函数.
2 如果一个类的成员函数不会修改成员变量的值,那么,就把他(成员函数)声明成只读函数.
3 只读和非只读函数可以形成重载关系.此时,对于只读对象,只能调用只读函数,而非只读对象会优先选择非只读函数.
4 特殊情况:只读函数可以修改声明为mutable的成员变量.
#include <iostream>
using namespace std;
typedef struct TData {
int a;
int b;
} TData;
class CTest {
public:
TData & getData()
{
std::cout << "[TData & getData()]" << std::endl;
return data;
}
const TData &getData() const
{
std::cout << "[const TData &getData() const]" << std::endl;
return data;
}
private:
TData data;
};
int main()
{
CTest test;
TData *pData = &test.getData();
const TData *const pcData = &test.getData();
/*-----------我是分割线----------------*/
const CTest &ctest = test;
//TData *pData2 = &ctest.getData(); //编译错误
const TData *const pcData2 = &ctest.getData();
return 0;
}