关于类模板中的函数重载问题

「已注销」 2016-09-20 09:32:47
#include <iostream>
using namespace std;

template<typename T, unsigned int N>
class Array
{
public:
T& back()
{
cout << "reference" << endl;
return (Elem[N - 1]);
}

const T& back() const
{
cout << "const_reference" << endl;
return (Elem[N - 1]);
}

T Elem[N];
};

int main(void)
{
Array<int, 5> cell;
const Array<int, 6> const_cell;

cell.back();//调用T& back()
const_cell.back();//调用const T& back()

return 0;
}

我的问题是:
1、函数重载不是根据参数列表来区分的吗,为什么Array中的两个back()函数不会报错?
2、cell和const_cell是如何知道该调用哪个函数版本的?
...全文
139 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
paschen 2016-09-20
  • 打赏
  • 举报
回复
引用 5 楼 fefe82 的回复:
[quote=引用 4 楼 paschen 的回复:] [quote=引用 2 楼 fefe82 的回复:] 类的非静态成员函数有一个隐含的参数(仅用于 overload resolution),是类本身的引用。 back(); 该参数为 Array& back()const; 该参数为 const Array&
这和静态没关系吧[/quote] 静态成员函数没有这个隐含的参数[/quote]
引用 5 楼 fefe82 的回复:
[quote=引用 4 楼 paschen 的回复:] [quote=引用 2 楼 fefe82 的回复:] 类的非静态成员函数有一个隐含的参数(仅用于 overload resolution),是类本身的引用。 back(); 该参数为 Array& back()const; 该参数为 const Array&
这和静态没关系吧[/quote] 静态成员函数没有这个隐含的参数[/quote] 不好意思,理解错你意思了,我以为你在对比静态与非静态
fefe82 2016-09-20
  • 打赏
  • 举报
回复
引用 4 楼 paschen 的回复:
[quote=引用 2 楼 fefe82 的回复:] 类的非静态成员函数有一个隐含的参数(仅用于 overload resolution),是类本身的引用。 back(); 该参数为 Array& back()const; 该参数为 const Array&
这和静态没关系吧[/quote] 静态成员函数没有这个隐含的参数
paschen 2016-09-20
  • 打赏
  • 举报
回复
类成员函数有一个隐含的参数就是指向类对象的指针,常量成员函数该指针是const的,可够成重载 常量对象将会调用常量版的back
「已注销」 2016-09-20
  • 打赏
  • 举报
回复
感谢大家的热情回答,我一直都在看,现在结贴。
fefe82 2016-09-20
  • 打赏
  • 举报
回复
类的非静态成员函数有一个隐含的参数(仅用于 overload resolution),是类本身的引用。 back(); 该参数为 Array& back()const; 该参数为 const Array&
pengzhixi 2016-09-20
  • 打赏
  • 举报
回复
额 后面的const是可以用来区分的

5,530

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 模式及实现
社区管理员
  • 模式及实现社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧