[問題記錄] 操做符連寫

在寫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++該進化一下了, 起碼個人編譯器的警告系統該進化了.

相關文章
相關標籤/搜索