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

C++中sizeof(int) > -1表达式结果为何为true?

C++ 中sizeof(int) > -1判定为真的底层规则

你贴出的测试代码如下:

#include <iostream>
using namespace std;

int main()
{
    if(sizeof(int) > -1)
        cout<<"ok";
    else
        cout<<"not ok";

    return 0;
}

这个运行结果本质是C++的整型提升和普通算术转换规则共同作用的结果,具体解释如下:

  • 首先明确基础定义:C++标准规定sizeof运算符的返回值类型是size_t,这是一个无符号整数类型,专门用于表示内存大小、对象长度这类非负数值,具体位宽由平台实现决定,常见有16位、32位、64位三种。
  • 你遇到的输出ok的情况,说明当前运行平台的size_t类型转换秩低于int类型:
    比如部分平台size_t为16位无符号整数(对应unsigned short),而int为32位有符号整数,此时size_t的所有取值都可以被int完整容纳。根据整型提升规则,秩低于int的无符号类型参与运算时,会先隐式转换为int类型。
    此时sizeof(int)的结果(通常为4)会被提升为有符号int类型的4,直接和同为有符号int的-1比较,4 > -1结果为真,因此输出ok。
  • 补充其他平台的常见表现:如果运行平台的size_t位宽和int相等(比如32位size_t对应32位int)或者位宽大于int,此时会触发普通算术转换规则:有符号整数会被隐式转换为对应无符号整数类型再做比较。-1转换为无符号类型后会变成该类型的最大值,此时sizeof(int) > 无符号类型最大值结果为假,会输出not ok。

该表现属于平台相关行为,根源是C++标准没有强制规定size_t的具体位宽,只要求它是可以容纳任意对象大小的无符号整数类型。

内容的提问来源于stack exchange,提问作者VIVEK SINGH GULIA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 23:21:02