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

捕获引用的Lambda自动变量sizeof结果不符合预期的疑问

问题解答

你的问题核心是对C++中引用的存储大小理解有误,具体原因如下:

  • 引用的底层实现:C++标准并未强制规定引用的具体实现方式,但主流编译器(如GCC、Clang、MSVC)在64位平台下,会将引用以指针的形式存储。64位平台的指针大小为8字节,因此单个int&类型的成员占用8字节空间。
  • Lambda对象的大小:你的Lambda捕获了val的引用,生成的匿名仿函数类仅包含一个int&成员。由于该成员在64位平台下占8字节,整个Lambda对象的sizeof自然为8,与你看到的输出一致。
  • 32位平台的差异:如果切换到32位编译模式,指针大小为4字节,此时sizeof(a)会输出4,符合你最初的预期。
  • cppinsights的局限性:cppinsights仅展示了Lambda语法层面展开后的类结构,不会体现引用底层存储的实际大小,所以你看不到额外成员,但存储大小由平台决定。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 04:52:12