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

C++中sizeof内的函数调用不会执行?无定义函数为何不报错?

问题解答

为什么没有函数定义也不会触发链接错误?

sizeof是C/C++中的编译期运算符,它仅计算操作数的类型对应的内存大小,完全不会执行操作数对应的实际代码。你写在sizeof内部的f(2)不会真的触发函数调用,编译器只会推导这个表达式的返回值类型为int,因此不需要获取函数f的实现,自然不会触发链接错误。
你运行得到的结果4,就是当前编译环境下int类型的占用字节数。

sizeof处理内部表达式的通用规则

  • 绝大多数场景下sizeof的计算完全在编译阶段完成,运行阶段不会产生任何相关运算逻辑
  • 当sizeof的操作数是表达式时,不会对表达式做实际求值,仅静态推导表达式最终返回值的类型,返回该类型的字节大小
  • 唯一例外是C标准支持的可变长度数组(VLA)场景:当sizeof作用于可变长度数组时,需要在运行期计算数组的实际大小,其余场景均符合上述两条规则

可以参考下面的代码验证「不对表达式求值」的特性:

#include <iostream>
int main() {
    int a = 10;
    std::cout << sizeof(a++) << std::endl; // 输出int的大小,通常为4
    std::cout << a << std::endl; // 输出10,a++没有被实际执行
    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:15:00