看板Programming
标 题Re: 请问C++的运算子重载
发信站政大狂狷年少 (Tue Dec 5 04:28:44 2006)
转信站ptt!ctu-reader!ctu-peer!news.nctu!news.cis.nctu!news.cs.nthu!WHSHS
※ 引述《[email protected]》之铭言:
> 小弟对於运算子重载有些问题想请教大家
> 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:
[email protected]
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"的狂狷不驯;属於年少的轻狂色彩 ◎