2.c++引數初始化列表
阿新 • • 發佈:2019-01-10
建構函式初始化列表以一個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟一個放在括號中的初始化式。例如:
#include<iostream>using namespace std;struct test1{ test1():a(5),b(10) { //a = 5; //b = 10; cout<<"a="<<this->a<<endl; cout<<"b="<<this->b<<endl; }int a; int
return 0;}注意:初始化列表的成員初始化順序:
C++初始化類成員時,是按照宣告的順序初始化的,而不是按照出現在初始化列表中的順序。
Example:
test1(int x, int y);
int m_x;
int m_y;
};
test1::test1(int x, int y) : m_y(y), m_x(m_y)
{
}
你可能以為上面的程式碼將會首先做m_y=I,然後做m_x=m_y,最後它們有相同的值。但是編譯器先初始化m_x,然後是m_y,,因為它們是按這樣的順序宣告的。結果是m_x將有一個不可預測的值。有兩種方法避免它,一個是總是按照你希望它們被初始化的順序宣告成員,第二個是,如果你決定使用初始化列表,總是按照它們宣告的順序羅列這些成員。這將有助於消除混淆。