假设我有以下包含 lambda 的变量:
auto a = [] { return true; };
我希望 a
稍后返回 false
。我可以按照这个思路做点什么吗?
a = [] { return false; };
这种语法给了我以下错误:
binary '=' : no operator found which takes a right-hand operand of type
'main::<lambda_a7185966f92d197a64e4878ceff8af4a>' (or there is no acceptable conversion)
IntelliSense: no operator "=" matches these operands
operand types are: lambda []bool ()->bool = lambda []bool ()->bool
有没有办法实现这样的目标?我想将 auto
变量更改为不同的 lambda。我是一个初学者,所以我可能缺少一些关于 auto
或 lambdas 的知识。谢谢。
最佳答案
每个 lambda 表达式都会创建一个新的唯一类型,因此您的第一个 lambda 的类型与您的第二个 (example) 的类型不同。此外,lambda 的复制赋值运算符被定义为已删除( example ),因此您无法做到这一点。对于类似的效果,你可以让 a
成为一个 std::function
对象,尽管它会花费你一些性能
std::function<bool()> a = [] { return true; };
a = [] { return false; };
关于C++11 将 `auto` Lambda 更改为不同的 Lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38621623/