Re: 請問C++的運算子重載
※ 引述《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"的狂狷不馴;屬於年少的輕狂色彩 ◎
討論串 (同標題文章)
Programming 近期熱門文章
PTT數位生活區 即時熱門文章