條款10: 令operator= 返回乙個reference to *this;
關於賦值,我們可以這樣寫:
int x,y,x;
x =y = z;
這就是所謂的連續賦值
為了實現「連鎖賦值」賦值操作符必須返回乙個reference指向操作符的左側實參。這是我們為class實現賦值操作符時應該遵循的協議:
#include using namespace std;
class widget
{public:
widget()
{ cout<<"呼叫無參建構函式"<
上面說賦值操作符必須返回乙個reference,我以前也是認為如果要連續操作,就必須返回引用,但是我用返回乙個物件試著執行了一下,
程式也會通過,並且在這個operator= 中還能得到一模一樣的效果:
經過研究發現,並非一定要返回引用,返回值物件時會增加拷貝建構函式和析構函式的呼叫,所以一般都是返回引用;
#include using namespace std;
class widget
{public:
widget()
{ cout<<"呼叫無參建構函式"<
《effective C 》讀書筆記
1,c 關鍵字explicit c 中,乙個引數的 建構函式 或者除了第乙個引數外其餘引數都有預設值的多參建構函式 承擔了兩個角色。1 是個 構造器,2 是個預設且隱含的型別轉換操作符 所以,有時候在我們寫下如 aaa 這樣的 且恰好 的型別正好是aaa單引數構造器的引數型別,這時候 編譯器就自動呼...
Effective C 讀書筆記
一 讓自己習慣c 1 條款01 視c 為聯邦語言 c 的組成可分為四部分 1.c c 仍然以c語言為基礎。區塊 語句 預處理 內建資料型別 陣列 指標等都來自c。2.object oriented c c with classes所訴說的 classes 包括構造和析構 封裝 繼承 多型 virtu...
讀書筆記 Effective C
部分條款過於深奧,部分條款已了然於心,僅記錄當下所識所學 對於常量巨集定義,最好用const代替 define 對於函式巨集定義,最好用inline代替 define include ifdef ifndef仍被需要 內建物件記得手動初始化 使用成員初始列替換賦值操作 以local static替換...