[问题记录] 操作符连写

5 篇文章 0 订阅

在写C++代码时候出了个幺蛾子...一个容易忽略的错误: 比较符号连写, vb, python惹的祸...脑子里跟着印象就这么写出来了

ListItem* MenuListModel::find(int row) const
{
    if (0 <= row < rowCount())
    {
        ListItem* item = m_ItemList.at(row);
        return item;
    }
    return NULL;
}


Problem:

1) C++中false可以被隐式转化为int类型数据0, true则是1; 

2) 操作符计算和读书时候学的数学比较是不同的;


伪代码: i<=j<k  --  operator<(operator<=(i,j), k)

如果 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) --> false


当然, 有的时候连写操作符还是挺方便: 

int a, b;
a = b =1;

虽然较真一点, 如果是类类型, 还是不要这么写;

C++的坑好多, 很多其他语言的语法糖千万不要随便用,  虽然我知道这个是基础中的基础知识, 但是写了几回python什么的回来就自然容易不注意...要么是我脑子不够用, 要么C++该进化一下了, 起码我的编译器的警告系统该进化了.




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值