小白求问关于类成员函数const T& 和T&的区别

weixin_37704257 2017-11-13 03:35:57
在github上下代码自己看看学习,发现相当一部分代码都会有如下情况:
Point& Map::getPoint(const Pos &p) {
return content[p.getX()][p.getY()];
}

const Point& Map::getPoint(const Pos &p) const {
return content[p.getX()][p.getY()];
同名函数,写了两遍,一遍是const T&,一遍是T&。
想问一下这么做的理由是什么?
另外,返回的reference是const reference(引用不变)还是const_reference(引用所指的量不变)
还有就是,始终不是很懂,函数体前的const的作用。搜了一下,和对象有关但有点乱,没弄懂。希望大神能推荐几篇文章读一读(最好有示例,纯理论真的很懵)

感谢大神了!
...全文
140 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
codedoctor 2017-11-15
  • 打赏
  • 举报
回复
...你用一下就知道了,比如如下的类,重载了[]运算符
class A{
	int a[10];
public:
	A() {};
	const int& operator [] (int index)const  { return a[index]; }
	int& operator [](int index) { return a[index]; }
};
int main() {
	A a1;
	const A a_const;
	a1[1] = 5;
	a_const[2] = 4;
	system("pause");
	return 0;
}
 
你试试就知道,a_const[2]是不能被修改的,如果去掉const的函数,a_const就不能调用普通函数了。 用const限定最重要的就是针对const的对象的一个特化,因为编译器只知道const的成员不能被修改,所以对于cosnt对象,非const的函数都不能使用 推荐你看一下《Effictive C++》
赵4老师 2017-11-14
  • 打赏
  • 举报
回复
不要纠结各种常量了,这个世界上唯一不变的就是变化。用API WriteProcessMemory还能修改正运行的其它进程的内存里面的所谓常量呢!
wenqinglee 2017-11-13
  • 打赏
  • 举报
回复
如果返回普通引用的话可以直接作为左值,如果返回const引用表示不能更改的,推荐Effective C++ 55条
hongwenjun 2017-11-13
  • 打赏
  • 举报
回复
const 前缀的参数 ;调用的的时候 支持 const 和 非const 参数 而没有const 的 不支持 const

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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