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

为什么sizeof计算两个long long相加结果返回8字节而非16字节?

问题原因解答

你得到8而不是16的核心原因是对sizeof运算符的功能和C++算术运算的类型规则存在误解:

  • sizeof计算的是操作数对应类型的内存占用字节数,除可变长度数组(VLA,C++标准不支持,属于部分编译器扩展)场景外,所有sizeof的求值都在编译期完成,和操作数的运行时数值无关。
  • 两个long long类型的操作数执行加法运算时,根据C++标准的常用算术转换规则,两个相同类型的有符号整数执行算术运算,返回值类型与操作数类型完全一致,仍然是long long。因此whatever[0] + whatever[2]的类型就是long long,sizeof该表达式等价于sizeof(long long),自然输出8。

额外提示:你提供的测试代码存在未定义行为。你声明的whatever是长度为1的long long数组,仅whatever[0]是合法可访问的元素,对whatever[2]的读写属于数组越界访问,运行时可能出现随机数值、程序崩溃等不可预期的结果。不过该问题不影响sizeof的计算结果,因为sizeof编译阶段就已经完成求值,不会执行实际的运行期数组访问操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:36:02