條款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...