item 6:自增(increment)、自減(decrement)操作符字首形式與字尾形式的區別
[cpp]
class upint
;
upint& upint::operator++()
const upint upint::operator++(int)
...
從**中可以看到,
1. 字首是先增加再返回,而字尾是先返回再增加。
2. 字首和字尾在表現形式上就有所不同,是通過引數來區分的,這是c++語言規範規定的區別標準。
3. 二者在返回值上也不相同,字首形式返回型別的引用,而字尾則返回const 型別。為什麼二者返回型別不相同,是為了防止出現 upint u; u++++;(在基礎型別中不合法)。為了保持和基礎型別一致而採取的考慮。
4. 不管是字首形式還是字尾形式,二者最終行為都是一致的(即增1),字尾實現採用字首實現,這樣就縮小改變,只需用改變字首的實現就可以二者都改變。
5. 從實現上可以看出,字尾形式比字首形式多了乙個臨時物件temp,而臨時物件會造成構造和析構的時間開銷,空間方面也會有開銷,這就導致字首形式的效率會比字尾要高,所以能使用字首形式就要使用字首形式。
More Effective C 《基礎議題》
1 指標 指標是乙個變數,只不過這個變數儲存的是乙個位址,指向記憶體的乙個儲存單元 而引用跟原來的變數實質上是同乙個東西,只不過是原變數的乙個別名而已。如 int a 1 int p a int a 1 int b a 上面定義了乙個整形變數和乙個指標變數p,該指標變數指向a的儲存單元,即p的值是a...
More Effective C 擴充套件方法
c 3.0中增加了許多新特性.其中.擴充套件方法允許我們在不修改原有 的基礎上擴充套件類 介面的功能.有技巧的運用該特性.能寫出有效率 易維護 美觀的 c 2.0提供了許多泛型與容器的介面和類.最常見的如icomparable常常需要新建乙個comparable來進行排序比較等等.但其預設只有乙個c...
more effective C 條款四解讀
深刻考慮是否需要給類提供乙個預設建構函式 有一些類擁有乙個預設建構函式是合理的需求,比如string比如容器 linked list vector 預設建構函式可以把他們初始化為空容器。但是有一些類我們最好還是不要提供預設建構函式。比如乙個equipment類 class equipment 對於這...