作者hunandy14 (Charlott.HonG)
看板C_and_CPP
标题[问题] 重载下标符号 const 用途
时间Mon Feb 20 18:03:06 2017
参考这篇:
https://goo.gl/33SyjS
我记得我之前有遇过这样的状况,缺少 const 函式不能编过
想不起来什麽是什麽情况了QuQ
// 重载下标符号
int & operator[](size_t idx){
return arr[idx];
}
// 重载下标符号 Const
const int & operator[](size_t idx) const{
return arr[idx];
}
什麽样的情况下才会存取 const 版本的函式呢
照着文章做,也没有执行到 const 版本的
测试代码:
http://ideone.com/fp5EBd
并没有印出 **const**,是我误会了什麽吗?
怎麽样才会印出 **const** 呢?
-------------------------------------------------------------
此外,因为要打2次也意味着修改要改两处,所以就想说可不可以这样
// 重载下标符号
int & operator[](size_t idx){
return arr[idx];
}
// 重载下标符号 Const
const int & operator[](size_t idx) const{
return (*this)[idx];
}
这样只要改一处就好了,是可行的办法吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.127.112.105
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1487584989.A.308.html
※ 编辑: hunandy14 (140.127.112.105), 02/20/2017 18:17:57
1F:→ ilikekotomi: 用到const需要物件也是const 02/20 19:51
2F:→ ilikekotomi: 把line35 改成const Arr a(5);就可以了 02/20 19:52
3F:→ ilikekotomi: 打两次的地方可以参考Effective C++的条款三 02/20 20:05
5F:→ ilikekotomi: 目前你的方法会因为进到const版本时 *this也是const 02/20 20:14
6F:→ ilikekotomi: 所以一直呼叫自己造成runtime error 02/20 20:14
对耶~应该把主代码写在const内
不然const会呼叫const版本的永远都跑不到主代码
7F:→ bluesoul: 用const物件呼叫就可以了 02/21 00:40
了解~
8F:→ LPH66: 如果有没有 const 没差的话写 const 版就足够了 02/21 00:44
9F:→ LPH66: 有差的话用个 const_cast 把一种转成另一种即可 02/21 00:44
10F:→ LPH66: (即是四楼程式码的做法) 02/21 00:45
了解~
--- 感谢各位的答覆
※ 编辑: hunandy14 (140.127.112.105), 02/23/2017 11:57:35