2013-10-24 164 views

回答

2

不,它使用提供的任何參數進行初始化。如果它有一個類的類型,那麼參數將被傳遞給一個合適的構造函數。

這是否意味着沒有創建數據的構造函數調用?

不。如果它具有類類型,則通過調用構造函數完成初始化。

0

當您在構造函數的初始化列表中初始化data時,將調用其參數化構造函數。
例子:

#include <iostream> 
#include <string> 

class Data { 
public: 
    Data(int firstArg, std::string mSecondArg) 
    { 
     std::cout<<"parameterized constructor called"<<std::endl; 
    } 
}; 

class SomeClass { 
public: 
    SomeClass(int firstArg, std::string secondArg) : data(firstArg, secondArg) {} 
private: 
    Data data; 
}; 

int main(int argc, char** argv) { 
    SomeClass someObj = new SomeClass(0, new std::string("empty")); 
    return 0; 
} 

有了這個代碼,如果數據出現在構造函數的初始化列表,那麼它只是初始化爲給定值,你會得到輸出
parameterized constructor called

0

§12.6.2/ 7:在MEM-初始化表達式列表或支撐-INIT-列表被用於初始化指定子對象(或者,在一個委派構造的情況下,完整的類對象)根據初始化規則8.5進行直接初始化。

換句話說,這意味着正常的構造函數被調用。

例如:

class Foo { Bar bar; Foo() : bar(...) { } }; 

是analoguous創建Bar對象作爲這樣:

Bar bar (...); 
相關問題