more effecitve C 閱讀筆記1

2021-09-01 05:31:01 字數 1888 閱讀 6389

條款1 仔細區別pointers和reference

//reference 一定得代表某個物件,有初始值

string & s;//錯誤

string s("xy");

string& rs = s;

//沒有所謂的null reference 這個事實意味著reference可能會比pointers更有效率

1.reference 不用測試其有效性 pointer需要測試它是否為空

//指標和引用之間的差異,指標可以被重新賦值,指向另乙個物件。引用卻總是指向它最初的物件。

string s1("xx");

string s2("yy");

string& rs = s1;

string *ps = &s1;

rs = s2; //rs仍代表s1 但是s1的值變為yy

ps = &s2; //ps指向s2 但是s1的值沒有變化

結論:需要指向某個東西,而且絕不改變指向或實現操作符而其語法需求無法由指標達成,選擇引用,其他選擇指標。

條款2  最好使用c++轉型操作符

//引入的四個新轉型操作符 

//static_cast const_cast dynamic_cast reinterpret_cast

過去: (type) ***xx

現在: static_cast (xx)

eg.int a,b;

double result = ((double)a/b);

int a , b;

double result = static_cast(a)/b;

//static_cast 和舊式c 強制轉換具有相同的威力和限制。

//const_cast 常見用途就是去const

void update(aaa *s);

const aaaa& csw = sw;

update(&csw); //錯誤 update不接受

update(const_cast&csw); // 正確 接受。

// dynamic_cast 是向下轉型 指向基類的物件引用或指標 轉型為 子類的物件的引用或指標

//reinterpret_cast 轉換 函式指標 型別

typedef void (*f)();

f fun[10];

//需求為將 下列函式指標放入fun中

int do();

fun[0] = & do; // 報錯 型別不符

fun[0] = reinterpret_cast (& do );

條款3 絕對不要以多型方式處理陣列

class b;

class bt:public b;

//內含ints

void printints(ostream& s, const b arry,int num)

}//呼叫

b barry[10];

printints(count,barry,10); // 正確執行

bt barry[10];

printints(cout , barry , 10); //不一定正確執行

//arry[i]是 指標算術表示式 的簡寫 代表 *(arry+i) arry是陣列起始位置

// +i 是所指記憶體相距多遠 i*sizeof(物件) 而引數arry申明的是b物件

//當 bt呼叫時 依舊用的 b 的距離 而一般情況下 子類的大小要大於父類

條款4 非必要 不提供 預設構造(default constructor)

就是不提供預設建構函式! 

條款5 對定製的 型別轉換函式 保持警覺

閱文與掌閱的真假繁華

高爾基說過 書籍是人類進步的階梯 雨果說過 書籍便是這種改造靈魂的工具。人類所需要的,是富有啟發性的養料。而閱讀,則正是這種養料 列夫 托爾斯泰說過 理想的書籍是智慧型的鑰匙 這般說說書籍或者說閱讀重要性的名言警句不在少數。那麼,問題來了 你們在看書的時候是更喜歡看紙質書還是電子書?關於這個問題,相...

object detection目標檢測閱讀記錄

1,一開始,利用神經網路以滑動視窗的形式對進行目標檢測,如overfeat。其原理即是用不同大小的視窗在上滑動,每個視窗對應乙個待檢測類別元素的正確率。2,接下來的方法是rcnn方法,此方法先利用傳統的影象分割技術對影象進行輪廓分割,再對每個分割出的部分用神經網路進行計算其正確率,此方法大部分 對其...

SynchronousQueue原始碼閱讀心得

synchronousqueue 簡寫為sq 同步佇列中,讀執行緒與寫執行緒只有相互匹配時才能完成一次完整的讀寫操作。而讀與寫的匹配依賴於transferqueue或transferstack中的transfer sq中重要的資料結構有transferqueue和transferstack,還有qn...