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

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

Linda Hamilton
Linda Hamilton原创
2024-10-30 19:42:30297浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn