最近在寫一個qt程序,碰到了一個warning,雖然明白怎麼避免 2 但是開始不明白爲什麼要報這個warning 3 4 //程序抽象一下,如下 5 //test.cpp 6 #include 7 using namespace std; 8 9 class A 10 { 11 int m_a; 12 int m_b; 13 public: 14 A():m_b(0), m_a(0) {} 15 }; 16 17 18 int main() 19 { 20 return 0; 21 } 22 23 //編譯 24 g++ -g -Wall -o test test.cpp 25 26 //你就會發現一個Warning 27 E:/source/test>make 28 g++ -g -Wall -o test test.cpp 29 test.cpp: In constructor `A::A()': 30 test.cpp:7: warning: `A::m_b' will be initialized after 31 test.cpp:6: warning: `int A::m_a' 32 test.cpp:9: warning: when initialized here 33 34 也就是說初始化順序跟變量申明順序有問題, 35 但事實上爲什麼會報這個warning? 36 或者說,編譯器認爲,m_a申明在m_b之前, 37 但是m_b比m_a先初始化,到底會帶來怎樣意想不到的結果 38 39 這個就要追溯到,c++的initialization list機制 40 A():m_b(0), m_a(0){} 41 這個初始化,到底是怎麼實現的 42 其實c++會在這個構造函數裏面加入他們的初始化代碼 43 於是這個構造函數等價與 44 A() { 45 m_a = 0; 46 m_b = 0; 47 ////上面是用戶不可見,c++自己生成部分 48 ..... // 這些是用戶添加的代碼 49 } 50 你現在已經驚奇的發現,雖然 51 A():m_b(0), m_a(0); 52 m_b的初始化在m_a前面,但是m_a確先初始化 53 理由只有一個,這個編譯器自動添加代碼的順序 54 是按照類成員的申明順序添加的!!!!!! 55 56 57 //我們寫個簡單的程序測試一下 58 59 #include 60 using namespace std; 61 62 class A 63 { 64 int m_a; 65 int m_b; 66 public: 67 A():m_b(-1), m_a(m_b) {} 68 void print() { cout<<"m_a = "<
開發Qt碰到的第一個問題(when initialized here)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章
QWidget之parentWidget()、nativeParentWidget()、 window()比較
laryyzhao
2018-08-27 20:04:12
Qt Model/View/Delegate 機制學習
laryyzhao
2018-08-27 20:04:12
Qt Button控件的屬性說明
我还在迷路
2018-08-27 20:03:44
QTreeWidgetItem去掉選中虛線框
HEHONG1602
2018-08-27 19:30:33
QT StandardButton 等提示框 警告欄 的 用法
applesoranges
2018-08-27 19:12:15
qt 滑動滑塊 ,進度條跟着滑動變化 代碼示例
applesoranges
2018-08-27 19:12:15
QT 初學 單擊一個按鈕 ,關閉一個界面 ,打開另外的一個界面 源碼
applesoranges
2018-08-27 19:12:15
Qt資料大全
阳光守望者Coder
2018-08-27 18:37:28
QT TCP Server
阳光守望者Coder
2018-08-27 18:37:27
QT 5.3 應用程序打包成可執行程序exe
阳光守望者Coder
2018-08-27 18:37:24
QT編程開發錯誤合集陸續更新
大菌子Link
2018-08-27 18:28:51
1.QSound之play和stop的使用
JohnChen52
2018-08-27 18:23:33
Qt安裝—搭建VS2008+QT開發環境
0度深蓝
2018-08-27 18:04:07
【BUG】QT QTcpSocket客戶端通信會重複執行兩次
依山居
2018-08-27 18:02:26
QT 無法解析的外部符號
依山居
2018-08-27 18:02:24