作者archon (三脚猫的把戏)
看板C_and_CPP
标题Re: [问题] 关於函数const 的问题~(搞不清楚)
时间Thu Oct 15 21:47:39 2009
爬文的时候翻到这一则文章在讨 const 跟 function overload...
主角是这两个
Box& TruckLoad::operator[](int index)
Const Box& TruckLoad::operator[](int index) const
我能理解第二个最末端那个 const 修饰了隐藏的 this,
导致在函式执行时不会动到 member varible...
但是,实际使用上,引用的参数还是 int index,两个一样,
要怎麽区别哪一个 member function 会被呼叫到?
有没有前辈能给个例子,
说明一下什麽情况下是第一个被叫到,什麽时候会用到第二个呢?
※ 引述《DarkNT (纽太)》之铭言:
: ※ 引述《fuha (mimi)》之铭言:
: : 现在还在了解多载 operator的问题
: : 书本上有一个部分看不是很懂
: : 小节的标题是 lvalue and overloading subscript operator
: : 它的意思想要实现
: : load[0] = load[1]
: : 於是 overloading 了
: : % Box 和 TruckLoad 都是物件
: : Box& TruckLoad::operator[](int index)
: : Const Box& TruckLoad::operator[](int index) const
: : 不懂的部分是 第二个 function 最後为何要有 const
: : 以及实际上运作的原理是如何?
: : 希望各位高手多多指教
: 把一个class的member function宣告const,比如说:
: class A {
: public:
: void B() const ;
: };
: 的意思是这个member function不会修改member variable。
: 同时也代表这个member function只能呼叫不会修改member variable
: 的operator或是function (後面有加const的function)。
: 现在回到这个问题,为什麽第二个function要在後面加上const,
: 一个原因是因为两个funciton都接受一样的变数,所以不加complier
: 没办法区别。第二个理由,第二个function回传的是一个const的
: reference,所以不会修改到member variable,所以加上const可以
: 给其他const的function呼叫,complier会依照function的定义去判断
: 要呼叫哪一个。
: 在member function加上const其实蛮有用的,可以有效的避免不少错误,
: 尤其是当你确定你这个member function不会改变member variable的时候,
: 因为当可以请complier帮你check错误的时候,何必自己处理呢?
: PS. 如果你在const的function里面呼叫non-const的function或是修改到
: member variable,complier会告诉你错误。
--
追根究底所得到的东西,是失望的观众,以及狼狈的魔术师...
De'Ring Practice
http://www.wretch.cc/blog/miauwally/21246514
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.45.179.4
1F:推 QQ29:看你左值是不是const 10/15 21:59
2F:推 QQ29:可爬这篇 10/15 22:01
3F:→ QQ29:16700 littleshan 大的文章 10/15 22:01
5F:→ archon:诚好文,我琢磨一下~~~ 谢谢 <(_ _)> 10/15 22:17