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

为何可调用被const引用的可变lambda?C++代码运行疑问

为什么这段带mutable lambda的C++代码能正常运行?

你的疑问逻辑是对的:带mutable的lambda,它的调用运算符operator()确实是非const成员函数,按常理const引用的lambda对象没法调用非const成员函数,但这段代码能跑通,核心原因在于你传入的是无捕获的mutable lambda,它有个特殊特性——可以隐式转换为对应的函数指针。

具体拆解:

  • 无捕获的lambda(不管加不加mutable)都能自动转换成和它调用签名匹配的函数指针类型。
  • 当exec里执行fn()时,编译器并没有直接调用lambda对象的operator(),而是把const引用的lambda对象转换成了函数指针,然后调用这个函数指针。函数指针的调用不受对象const属性的限制,所以代码能正常编译运行。

你可以试试给lambda加个捕获变量,这时候它没法转成函数指针,代码就会编译报错了:

int main()
{
    auto exec = []( auto const &fn ) { fn(); };
    int a = 1;
    exec( [a]() mutable { a++; } ); // 编译错误:无法在const限定的对象上调用非const成员函数
}

内容的提问来源于stack exchange,提问作者Edison von Myosotis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:27:38