捕获引用的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
相关产品推荐
相关产品推荐

