條款26:盡可能延後變數定義式的出現時間
當你定義乙個變數的時候就要保證這個變數能夠在程式中使用到,不要定義無意義的變數,這樣就要求我們最好是在變數使用到
的時候才做定義,因為如果乙個變數定義了卻乜有使用可能會造成效率上的降低,畢竟很多變數的構建是要呼叫對應的建構函式 和析
構函式的,考慮下面的例子:
std::string setname(std::string& name)
name_ = name;
...return name_;
}
在上面的這個例子中,在函式內部定義了string變數name_,但是在丟擲異常的時候這個變數卻成了白板,根本就沒有被用到,因
此我們可以將name_變數的定義放到name_被賦值的地方,也就是在丟擲異常的後面!還有一點需要注意的地方是我們對
變數進行定義的時候盡量的用有效的值進行初始化,在上面的例子中我們可以通過引數name進行變數的初始化!
在乙個迴圈中定義變數的時候,應該將變數定義在迴圈的外層還是內層這也需要注意下,下面例子:因此在採用哪種方法的問題上要考慮建構函式和析構函式對賦值函式效率的不同,此外後面的那種方式因為變數是定義在迴圈內部widget w;
for(int i = 0; i < 100 ; i++)
for(int i = 0; i < 100 ; i++)
上面的例子中那個更加高效呢?第一種執行了乙個建構函式+100個賦值函式,第二種執行了100個建構函式和100次析構函式
的因此其命名空間的影響比較小,是一種不錯的方式!
請注意:
Effective C 讀書筆記 2
讓自己習慣c 條款1 視c 為乙個語言聯邦 c 可以看作是四種次語言組成的 c 包括區塊 語句 預處理器 內建資料型別 陣列 指標等 object oriented c 主要表現c 的面對物件的性質,包括類 封裝 繼承 多型性 virtual函式等 template c 為c 泛型程式設計部分 st...
《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...