C_and_CPP 板


LINE

开发平台(Platform): (Ex: Win10, Linux, ...) Win7 编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出) C++ 问题(Question): 在看蚂蚁书的operator overloading的时候, 对这个章节的case study: class Array 有点疑惑: 1. const Array &operator=( const Array & ); 这里return回来设为constant有甚麽意义吗? 避免我们做出(a=b)=c 的动作? 2. const Array &operator=( const Array & ); 想make sure一下, 这里使用传入参数为reference的原因是 若使用pass by value, 会copy一份传进来, 就会呼叫到传入参数的copy constructor. 所以才避免使用pass by value吗? 3. int &operator[]( int ); int operator[]( int ) const; 在做[]的operator overloading时, 两个传入参数一样, 只是return回来的一个是value, 一个则是reference, 这样我在做call function时, 怎麽判断是进入哪个function? 抱歉, 小的还对C++刚入门, 对这些基础还不熟, 但却又希望能够把他们确实搞懂 先谢谢各位大大解惑了!!! --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.164.90.171
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1507130814.A.FD5.html
1F:→ bluesoul: 1, 是 2, 是 3, 一个是const 一个不是 10/04 23:30
2F:→ notBeing: constant object shall call const member function 10/05 01:03
3F:→ PkmX: 1. 通常copy assignment operator是return T&不是 const T& 10/05 01:06
4F:→ PkmX: 2. 也有一种作法是pass by value然後用copy-ctor + swap 10/05 01:07
5F:→ PkmX: 实做 copy assignment operator 俗称 copy-and-swap idiom 10/05 01:07
6F:推 LPH66: 3. 非常数版回传 reference 的原因是要使得 obj[idx]=val; 10/05 04:03
7F:→ LPH66: 这里的 = 能够真的把值赋给左边那个位置 10/05 04:04
8F:→ LPH66: 这当然需要 obj 不是一个常数物件 10/05 04:04
9F:→ LPH66: 同时回传的是 reference 可以做为左值而得以赋值 10/05 04:05
10F:→ LPH66: 啊, 我似乎看懂你的问题了: 第二个函数的 const 表示这函数 10/05 04:06
11F:→ LPH66: 是常数物件也能够呼叫的函数, 在此函数里 this 有常数性 10/05 04:07
12F:→ LPH66: 而第一个函数的 this 则没有常数性 10/05 04:07
13F:→ LPH66: 这个常数性的有无就跟参数的常数性有无一样 10/05 04:08
14F:→ LPH66: 会对 overload 决议造成影响 10/05 04:08
非常谢谢bluesoul, notBeing, PkmX和LPH66诸位的回答, 还是有想要厘清的地方 1. 由於蚂蚁书上写的是有 const T&, 我自己本身是觉得有没有const好像没有差太多, 除了预防(a=b)=c;的情况产生以外, 好像没有甚麽实质效果和意义, 还是有甚麽情况一定 会使用到return为const的时候呢? 2. 谢谢PkmX大大补充, 我有参阅了 https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom 此篇有谈到copy & swap idiom的优势, 看起来可以善用copy construnctor来制作copy assignment达到code duplication 只不过突然想到原本题目中 即便我今天不传入reference在 const Array &operator=( const Array ); 而是传vlaue进去, 那就会呼叫到copy construnctor, 我一样在这个assignment的function结束後也会呼叫 到destructor把这个copy的给解构 程式还是能正常运作才是. 所以我的理解是这样子的动作因为会做到copy & destructor 所以会让程式做无意义的动作, 比较耗时和耗资源 所以才会倾向使用传入reference吗? 3. 谢谢LPH66大大的回覆, 我能理解当宣告常数物件的时候, 我只能对第二个函数做使用 但是若非常数物件时, 对我们今天写 array[i] 时, 他怎麽知道是进入第一个函数还是第 二个函数呢? 谢谢您们的帮忙! ※ 编辑: dwight90488 (60.250.8.18), 10/05/2017 11:13:56
15F:→ a27417332: 其实LPH大大有提到,就是 Overload Resolution 去决定 10/05 16:35
16F:→ a27417332: 而之所以会走 Overload Resolution 就是因爲 this 有没 10/05 16:38
17F:→ a27417332: 有 const 修饰 10/05 16:40
18F:→ a27417332: 可以想像成 this 是 member function 的第零个参数(? 10/05 16:42
19F:→ stucode: 关於2.,一般会传 const reference 是为了消弥不必要的 10/05 16:49
20F:→ stucode: 复制成本。例如用普通方式实作 copy assignment 时,会 10/05 16:49
21F:→ stucode: 确认是否为 self-assignment,假如是的话就可省略复制 10/05 16:49
22F:→ stucode: 步骤。在实作 copy&swap 的情况下,把第一步的复制提前 10/05 16:49
23F:→ stucode: 到参数(即传 value 而非 const reference),反而有助 10/05 16:49
24F:→ stucode: 於编译器做 copy elison 最佳化,减少成本。 10/05 16:49
大概有点了解了^^ 谢谢a27417332 & stucode大大您们的解说! ※ 编辑: dwight90488 (1.164.90.171), 10/06/2017 22:45:36







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:BabyMother站内搜寻

TOP