我發現了一種初始化類成員q的查詢方式,即把它分配給一個通過建構式i初始化的不同類成員:
class test{
public:
test(int c) : i(c) {
}
int i;
int q = i;
};
int main() {
std::cout << test(1).q << std::endl; //outputs 1.
}
然而,如果我調換一下i和q的宣告順序:
int q = i;
int i。
列印出i,輸出0。
這樣初始化類成員是個壞主意嗎?顯然,在這個例子中,在建構式中添加: i(c), q(c)可能更容易。
但是對于有一個依賴于i的類成員的情況,例如,一些物件的建構式需要一個int(i),并且有一個私有的=運算子和復制建構式,這種方法可能是初始化該物件的一個好方法?還是說這是個壞主意,應該永遠避免?
uj5u.com熱心網友回復:
是的,你已經概述了失敗的條件。 不難想象,有人會因為重新排序而無意中破壞了你的代碼。
如果你想讓你的代碼變得更有價值,那么你就必須讓它變得更好。
如果你想做這樣的事情,最好是在建構式中從輸入源中分配這兩者。
test(int c) : q(c), i(c) {}
這樣就減少了初始化順序的混亂,而且兩個變數也不再有依賴性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/328121.html
標籤:
下一篇:如何根據隊友來預測贏家
