More Effective C學習筆記二 運算子

2021-10-03 10:01:38 字數 823 閱讀 2681

5.謹慎定義型別轉換函式

允許編譯器進行隱式轉換的兩種寫法:

class temple
class rational

為了防止無意的隱式轉換造成很難發現的錯誤,可以使用其他函式名代替隱式轉換運算子:

class rational

rational r(1, 2);

cout << r.asdouble();

cout << r; //error

通過不宣告運算子得方法,可以克服隱式型別轉換運算子得缺點,但是單引數建構函式不是這麼容易繞過。

為了克服這種缺點:

1.為你的單引數建構函式 運用 explicit關鍵字,拒絕為隱式型別轉換呼叫建構函式。

2.使用**類。

結論:讓編譯器進行隱式型別轉換所造成的弊端要大於它帶來的好處,除非確實需要,不要定義型別轉換函式。

6.自增,自減操作符字首形式與字尾形式的區別

class upint ;
引數用來區分字首和字尾呼叫。 返回const物件的原因是禁止 i++++這種方式的呼叫。

效率問題: 盡可能使用字首呼叫。

7.不要過載「&&」,「||」, 或 「,」

8.理解不同含義的new和delete

(這個可能會在c++記憶體管理裡歸納,(侯捷老師的課))

//todo

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 對於這...