2010-08-17 103 views
5

可能重複:
C++ weird constructor syntax
Variables After the Colon in a Constructor
What does a colon (:) following a C++ constructor name do?冒號在構造函數中的含義是什麼?

對於下面的C++函數:

cross(vector<int> &L_, vector<bool> &backref_, vector< vector<int> > &res_) : 

    L(L_), c(L.size(), 0), res(res_), backref(backref_) { 

    run(0); 

} 

什麼冒號( 「:」)告訴關係是它的左側和右側部分?可能的話,這段代碼可以說什麼呢?

+0

投票以重複的方式結束,但原始問題的標題留下了許多不足之處。是否應該編輯? – Troubadour 2010-08-17 15:54:58

+0

嘿嘿,好的檢查員 – luna 2010-08-17 16:03:24

+3

我沒有看到'怪異的語法'問題的標題的主要問題。這兩個問題的真正問題是,一旦你知道搜索「初始化列表」,你的問題已經解決了。不過,我認爲在標題中保留「構造函數」是有幫助的。一個':'在任何情況下幾乎都是不可測量的;也許拼寫它'冒號'會有所幫助,我不知道。 – 2010-08-17 16:20:55

回答

4

這是在實際調用類的c'tor之前初始化類成員字段的一種方法。

假設您有:

class A { 

    private: 
     B b; 
    public: 
     A() { 
      //Using b here means that B has to have default c'tor 
      //and default c'tor of B being called 
     } 
} 

所以,現在通過書面方式:

class A { 

    private: 
     B b; 
    public: 
     A(B _b): b(_b) { 
      // Now copy c'tor of B is called, hence you initialize you 
      // private field by copy of parameter _b 
     } 
} 
+0

謝謝,請問什麼是「c'tor」? – luna 2010-08-17 15:49:53

+0

c'tor ==構造函數 – John 2010-08-17 15:51:21

+0

@John:好的,看,它確實節省了時間 – luna 2010-08-17 15:52:25

4

這是一個成員初始化列表。

您正在將每個成員變量設置爲冒號後部分括號中的值。

+0

不客氣! – John 2010-08-17 15:52:08

3

像在C++中很多東西,:用於很多事情,但在你的情況下,它是一個開始初始化器列表。

其他用途例如在public/private/protected之後,在作爲三元運算符的一部分的案例標籤之後,並且可能還有其他用途。

+0

注意:主題被修改後,我的答案更具體。 – 2010-08-17 15:40:23