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

C++中含vector::size()的表达式计算异常?示例代码输出不符

为什么C++里包含vector大小的表达式计算不符合预期?

嘿,这个问题的核心是无符号整数的溢出特性在作祟,我来给你拆解清楚:

问题根源

  • vector::size()的返回类型是size_t,这是一个无符号整数类型(通常对应unsigned int或unsigned long long,取决于平台)。
  • 当你的vector是空的时候,v.size()的值是0。这时候计算v.size() - 1,因为是无符号整数运算,不会得到-1——无符号整数不允许负数,所以会发生溢出回绕,结果变成该无符号类型能表示的最大值(比如32位系统上是4294967295)。
  • 接下来比较0 < 这个超大的正数,结果自然是true,所以代码会输出"true"。

解决办法

你可以通过以下几种方式避免这个问题:

  • 先判断vector的大小是否大于1,再进行后续逻辑:
    if (v.size() > 1) {
        printf("true");
    } else {
        printf("false");
    }
    
  • 把size()的结果强制转换为有符号整数类型(如果vector的大小可能超过int范围,用long long会更稳妥):
    if (0 < static_cast<long long>(v.size()) - 1) {
        printf("true");
    } else {
        printf("false");
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:01:48