Re: 請問C++的運算子重載

看板Programming作者時間18年前 (2006/12/05 05:01), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《ivort.bbs@bbs.wretch.cc》之銘言: > 小弟對於運算子重載有些問題想請教大家 > Class Alpha { > int a; > int b[3]; > public: > Alpha(int x){a = x;} > Alpha& operator++(); // 前置 > Alpha operator++(int); //後置 > Alpha& operator+=(const Alpha& v); > Alpha& operaot[](int); > }; > 請問前置operaot++ 和operator+=, 我有看過有人使用 > Alpha operator++(); > Alpha operator+=(); > 1.也就是他們不是return by reference,請問這兩種寫法 > 那一個比較好呀!雖然兩個執行起來好像都是對的. 前置 ++ 不可以不是 reference, 因為 ++x 完畢以後需要是更新後的 x 本身, 除非你想破壞 C/C++ 原有的語義。 至於 += 按照 C/C++ 原有語義, 傳回 reference 才是正確的。 > 2.另外一個問題就是,使用return by reference的時機是怎樣? 直覺上的回答是為了效率好時, 稍微考慮一下後的回答是不想破壞 C/C++ 原有語義時, 事實上兩者都是原因, 不過後者比較會是最後的原因。 至於後置 ++ 為什麼是傳回 value 應該知道了吧? 因為實作上是拿個 local 變數保存舊的值, 將原本的變數累加 1 以後傳回原本保存的值, 所以如果傳 reference 的話會出事 (因為是 local 變數)。 > 3.最後operator[],為什麼一定要return by reference,能不能 > 解釋一下. 也是 C/C++ 語義匹配問題, 如果你不傳回 reference, 你覺得 a[3] = 10; 這種敘述會發生什麼事? -- Name: Tseng, Ling-hua E-mail Address: uranus@it.muds.net School: National Tsing Hua University Department: Computer Science Interesting: C++, Compiler, PL/PD, OS, VM, Large-scale software design Researching: Software pipelining for VLIW architectures Homepage: https://it.muds.net/~uranus -- ╔═══╗ ┼────────────────────────╮ 狂狷 Origin:[ 狂 狷 年 少 ] whshs.cs.nccu.edu.tw ╰─╮ 年少 ┼╮ < IP:140.119.164.252 > ╰─╮ ╚╦═╦╝ From:61-230-226-232.dynamic.hinet.net ─╨─╨─ KGBBS 遨翔"BBS"的狂狷不馴;屬於年少的輕狂色彩
文章代碼(AID): #15T8oH00 (Programming)
文章代碼(AID): #15T8oH00 (Programming)