條款26 盡可能延後變數定義式的出現時間

2021-10-01 20:59:39 字數 1104 閱讀 5668

主要是效率上的考慮。

考慮下述**:

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