首页 > 后端开发 > C++ > C 0x 中的 Lambda 按值捕获始终恒定吗?

C 0x 中的 Lambda 按值捕获始终恒定吗?

Linda Hamilton
发布: 2024-10-30 19:42:30
原创
296 人浏览过

Is Lambda Capture by Value Always Constant in C  0x?

Lambda 按值捕获在 C 0x 中始终为常量?

尝试通过引用捕获值但修改其内容时会出现此问题lambda 表达式。默认情况下,编译器将捕获的值视为常量,确保它们保持不变。但是,某些场景可能需要对捕获的值进行非常量访问。

了解按值捕获:
在 C 0x 中,lambda 函数可以按值或按引用捕获变量。按值捕获时,会在 lambda 范围内创建变量的副本,从而允许在 lambda 内进行修改。但是,默认情况下,捕获的副本被视为常量,从而防止对其进行修改。

救援的可变关键字:
要克服此限制,可以使用可变关键字。通过将 mutable 添加到 lambda 的参数列表中,我们显式地将捕获的值声明为在 lambda 范围内可修改。这允许对捕获的值进行非常量访问,解决了所提供的代码片段中描述的问题。

示例:
考虑以下代码,该代码尝试通过引用捕获值并调用非常量方法:

struct foo
{
bool operator () ( const bool & a )
{

return a;
登录后复制

}
};

int main()
{
foo afoo;

auto bar = [=] () -> bool

{
  afoo(true);
};
登录后复制

return 0;
}

在此代码中,将 foo::operator() 设置为 const 可解决编译问题。然而,直接在 lambda 表达式中使用 mutable 可提供更大的灵活性,并允许对捕获的值进行非常量访问,而无需修改原始声明

以上是C 0x 中的 Lambda 按值捕获始终恒定吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板