c++ - 调用者如何知道应该调用哪些同名的成员函数
问题描述
我今天看到下面的代码。
我知道返回引用和返回 const 引用之间的区别。
但是不知道什么时候会调用T& operator () *,什么时候会调用const T& operator ()const *。
他们有相同的名字。
template<typename T>
class CSmartPtr
{
public:
CSmartPtr(T *ptr = nullptr) :mptr(ptr) {}
~CSmartPtr() { delete mptr; }
T& operator*() { return *mptr; }
const T& operator*()const { return *mptr; }
private:
T *mptr;
};
int main()
{
CSmartPtr<int> ptr(new int);
*ptr = 20;
cout << *ptr << endl;
return 0;
}
解决方案
但是我不知道什么时候会调用 T& operator()*,什么时候会调用 const T& operator()const*。
他们有相同的名字。
在这种情况下,如果在const
对象上调用成员函数,const
则将调用该方法,并且将为非常量对象调用非常量方法。
调用者如何知道应该调用哪些同名的成员函数?
他们不知道,也不应该知道。重载集的全部意义在于调用者不知道调用了哪个确切的重载。这是一个实现细节。当调用者从重载集中调用函数时,调用者应该使用相同的语法。
取决于调用函数的参数是否正确取决于重载集的作者。
如果您确实希望调用者知道调用了哪个函数,那么根本不要使用重载集,只需提供具有不同名称的函数即可。
推荐阅读
- grafana - 如何在 Grafana 7 中显示 HTML
- python - Leetcode 5 最长回文子串 (python)
- python - 如何在不使用脚本录制和回放选项的情况下自动化 SAP GUI 流程
- php - codeigniter 输入日期字段不应接受前几天
- javascript - Javascript高阶函数:
- next.js - 带有本地化的 Next.js - 使用入口配置在子路径上部署
- python - 有人可以解释这两个函数之间的时间复杂度吗?
- r - 连接 X 和 Y 轴
- reactjs - tsc compile in React (create-react-app) 需要明确的编译标志,尽管我在 tsconfig.json 中设置了它们
- node.js - ERR_HTTP_HEADERS_SENT 管道相关?