主要是效率上的考慮。
考慮下述**:
void
encrypt
(std::string &s)
std::string encryptpassword
(const std::string &password)
//具體獲取密碼加密操作
encrypted = password;
encrypt
(encrypted)
;return encrypted;
}
假如**在執行if塊時,丟擲異常,那就就是定義了 encrypted 但是沒有使用它,但是只要定義了就得負擔建構函式和析構函式帶來的開銷。
確定使用它,且能給它賦初值後。
上述**的改良版本如下:
void
encrypt
(std::string &s)
std::string encryptpassword
(const std::string &password)
//具體獲取密碼加密操作
string encrypted
(password)
;encrypt
(encrypted)
;return encrypted;
}
考慮如下**:
迴圈外定義變數:
widget w
for(
int i =
0; i < n;
++i)
迴圈內定義變數:
for
(int i =
0; i < n;
++i)
考慮兩個版本所需要的開銷:
如果乙個賦值的成本低於一組構造和析構,那麼a比較高效,否則b比較高效。另外a版本造成變數的作用域比b的大,這可能對於程式的易理解性、易維護性有一定的衝擊。
總之:除非
否則應該選擇做法b。
條款26 盡可能延後變數定義式的出現時間
條款26 盡可能延後變數定義式的出現時間 postpone variable definitions as long as possible.內容 由於定義乙個類變數時,你就必須承擔起構造和析構的負擔.所以我們要儘量減少定義一些我們不用的物件,估計你現在對這條約束很不在意,我不用它為啥要定義它,我定...
條款26 盡可能延後變數定義式的出現時間
結論1 盡可能延後變數定義式的出現,這樣做可增加程式的清晰度並改善程式效率。應該延後變數的定義,直到使用該變數的前一刻為止,甚至應該嘗試延後定義變數直到能夠給它初值實參為止。這樣不僅能夠避免構造 和析構 非必要物件,還可以避免無意義的default構造行為。當變數應用於迴圈時,有兩個一般性結構 wi...
條款26 盡可能延後變數定義式的出現時間
主要是效率上的考慮。考慮下述 void encrypt std string s std string encryptpassword const std string password 具體獲取密碼加密操作 encrypted password encrypt encrypted return e...