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

Lambda函数中auto关键字的类型推导规则及代码编译疑问

Lambda参数auto推导与std::function匹配的问题

你给出的代码如下:

function<void (const int &)> foo = [&](auto x) {
    x = 42;
};

你疑惑的点是为什么x=42能编译通过,这里的核心是泛型Lambda的auto参数推导规则和std::function的类型是相互独立的:

  • 首先,带auto参数的Lambda是泛型Lambda,它的参数类型推导规则和模板函数的类型推导完全一致。这里的x是按值传递的(没有加&或const&),所以当用const int&类型的实参去调用这个Lambda时,模板推导会忽略实参的const和引用属性,最终推导出x的类型是int——也就是说,x是传入参数的一个拷贝,自然可以对它赋值。
  • 而std::function<void(const int&)的作用只是要求它所存储的可调用对象能够接受const int&类型的参数。你的泛型Lambda完全满足这个要求:当传入const int&时,会自动拷贝出一个int类型的x,这是合法的隐式转换。

简单说,你混淆了泛型Lambda自身的参数推导,和std::function对可调用对象的类型要求。auto推导只看Lambda参数的声明方式,和外面的std::function类型无关。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 11:55:17