2010-12-03 92 views
6

我有兩個成員變量初始化映射並將類成員變量設置爲在C++中爲空?

std::map<int, Node*> a; 

std::set<Node*> b; 

在我的大學使用的樣式檢查需要在類的構造函數初始化所有成員變量是C++類。這些成員變量ab如何在它們所在類的構造函數中初始化爲空?

+0

您已經評論了兩個回答「This works,thanks」,現在應該接受一個(如果答案相同,通常是第一個答案)。 ;) – Mephane 2010-12-03 11:23:27

回答

11

像這樣:

class A 
{ 
    public : 

    A() : s(), 
     m() 
    { 
    } 


    std::set<int> s; 
    std::map< int, double > m; 
}; 
+0

這個工程,謝謝! – 2010-12-03 10:34:34

2

這樣的SomeClass::SomeClass() : a(), b() {}

+0

這工作,謝謝! – 2010-12-03 10:33:45

2

由於兩個std::setstd::map有它們將被隱式初始化「用戶」 -declared默認構造函數但是你構造你的類。您不必做任何特別的事情來符合「風格」指南。

+0

謝謝Charles。這裏的問題是樣式檢查是自動完成的,作爲自動評分系統的一部分,並要求所有成員變量都被顯式初始化。 – 2010-12-03 10:36:39

+0

@Marek Miettinen:你確定風格檢查不僅適用於POD類型嗎?我從來沒有見過風格指南堅持明確地初始化具有默認構造函數的東西,這些默認構造函數將在任何情況下用於隱式初始化。 – 2010-12-03 10:44:14

0

當應用-WeffC++警告選項時,此檢查由g ++編譯器執行。 請參閱第4項(「確保對象在使用前被初始化」 Scott Meyers,Effective C++,Book for more information, 爲什麼使用成員初始化列表初始化所有成員可能是合理的 基本上他建議持續執行此操作,並將其優先於 構造函數體內的作業