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