[问题记录] 操做符连写

在写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++该进化一下了, 起码个人编译器的警告系统该进化了.

相关文章
相关标签/搜索