You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在调试中判断C++逻辑与运算符的哪个操作数为假?

如何在调试时判断C++逻辑与运算中哪个操作数为假?

给定代码:

auto found = std::lower_bound(container.begin(), container.end(), val);
return found != container.begin() && found != container.end();

想要调试时确定&&的左、右操作数哪个为假,或是两者都为假,但使用gdb的print命令查询时遇到报错:

(gdb) p found != container.end()
Cannot resolve function operator!= to any overloaded instance

可以用以下几种方法解决:

  • 分步打印迭代器底层值
    多数容器的迭代器(比如std::vector的迭代器)本质是指针或封装了指针,直接打印迭代器的底层地址就能手动对比:

    p found
    p container.begin()
    p container.end()
    

    对比输出的地址值,就能知道found != container.begin()和found != container.end()的真假。

  • 显式调用重载的operator!=
    如果迭代器的不等运算符是成员函数,直接显式调用:

    p found.operator!=(container.begin())
    p found.operator!=(container.end())
    

    如果是非成员函数重载,直接指定参数调用:

    p operator!=(found, container.begin())
    
  • 拆分为临时变量调试
    利用&&的短路特性,直接把两个条件拆成临时变量,重新编译后调试:

    bool cond1 = found != container.begin();
    bool cond2 = found != container.end();
    return cond1 && cond2;
    

    调试时直接打印cond1和cond2的值,结果一目了然。

  • 用call命令替代print
    gdb的call命令处理重载运算符的兼容性更好,执行后会返回布尔结果(0为假,非0为真):

    call found != container.begin()
    call found != container.end()
    

内容的提问来源于stack exchange,提问作者siga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:30:47