在寫C++代碼時候出了個幺蛾子...一個容易忽略的錯誤: 比較符號連寫, vb, python惹的禍...腦子裏跟着印象就這麼寫出來了python
ListItem* MenuListModel::find(int row) const { if (0 <= row < rowCount()) { ListItem* item = m_ItemList.at(row); return item; } return NULL; }
Problem:ui
1) C++中false能夠被隱式轉化爲int類型數據0, true則是1; spa
2) 操做符計算和讀書時候學的數學比較是不一樣的;code
僞代碼: i<=j<k -- operator<(operator<=(i,j), k)blog
若是 i=0,j=0,k=1 -- operator<(true, 1) 結果是false (按邏輯來講應該是true), 操做符的計算和數學公式中的理解是不一樣的;編譯器
由於 i,j,k is build-in 類型, 它們用的應該是非成員操做符: 相似這樣 int& operator(int, int), 若是它們是類類型, 可能會有成員操做符, 但那樣也會出錯;數學
--> i.operator<=(j).operator<(k) --> (true).operator<(1) --> falseit
固然, 有的時候連寫操做符仍是挺方便: 編譯
int a, b; a = b =1;
雖然較真一點, 若是是類類型, 仍是不要這麼寫;class
C++的坑好多, 不少其餘語言的語法糖千萬不要隨便用, 雖然我知道這個是基礎中的基礎知識, 可是寫了幾次python什麼的回來就天然容易不注意...要麼是我腦子不夠用, 要麼C++該進化一下了, 起碼個人編譯器的警告系統該進化了.