c++中初始化列表的初始化變量順序問題
阿新 • • 發佈:2018-08-05
bsp 變量 結果 請問 iostream 類的成員 sin vat 並不是
例題來看:請問下面程序打印出的結果是什麽?
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 class base 7 { 8 private: 9 int m_i; 10 int m_j; 11 public: 12 base(int i):m_j(i),m_i(m_j); 13 base():m_j(0),m_i(m_j){} 14 int get_i() {return m_i;} 15 int get_j() {returnm_j;} 16 }; 17 int main(int argc,char* argv[]) 18 { 19 base obj(98); 20 cout<<obj.get_i()<<endl; 21 cout<<obj.get_j()<<endl; 22 return 0; 23 }
如果你回答“98,98”,說明你對c++根本不是精通,熟悉都談不上。因為這個類的成員變量的聲明順序為:先 m_i,再是 m_j,而初始化列表的初始化變量順序是根據成員變量的聲明順序來執行的,也就是先給m_i賦值,再給m_j賦值;並不是列表中的順序。因此m_i會被賦予一個隨機值。此程序實際輸出為——一個隨機數和98。
c++中初始化列表的初始化變量順序問題