它正在初始化使用構造函數的初始化列表中的成員變量。它會更清楚,如果構造函數參數的名字是不一樣的數據成員:
Features(int a,int b,int c,int d)
: F1(a), F2(b), F3(c), F4(d) { }
有數據成員的一些命名約定,這樣,這些都是很容易識別,並從當地區分它是有用的代碼中的變量。實例前綴的m_
或使用後_
:
struct Features {
int m_f1;
int m_f2;
int m_3f;
int m_f4;
Features(int f1,int f2,int f3,int f4)
: m_f1(f1), m_f2(f2), m_f3(f3), m_f4(f4) { }
};
這兩個構造函數可以被使用如下:
Features f(11,22,33,44);
std::cout << f.m_f1 << "\n"; // prints 11
std::cout << f.m_f2 << "\n"; // prints 22
std::cout << f.m_f3 << "\n"; // prints 33
std::cout << f.m_f4 << "\n"; // prints 44
注意,此構造被定義的事實意味着,編譯器將沒有再提供一個默認的構造函數。所以,如果你希望能夠到這一點:
Features f;
,那麼你需要提供自己的默認構造函數:
Features() : m_f1(), m_f2(), m_f3(), m_f4() {} // initializes data members to 0
我相信你知道那個juancho,但是對於清晰度:它們不一樣,因爲C++區分大小寫。 'f1'不是'F1'。 – steffen 2012-07-30 13:13:09
@juanchopanza。在這種情況下,我們將mamber變量初始化爲什麼?換句話說,這裏的成員變量是什麼值?由於它們是「int」類型,它們是否具有值「0」? – Simplicity 2012-07-30 13:18:41
它們被初始化爲傳遞給'Features'構造函數的參數。我添加了一個小例子。 – juanchopanza 2012-07-30 13:21:28