C++11 将 `auto` Lambda 更改为不同的 Lambda?

标签 c++ c++11 lambda auto

假设我有以下包含 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/

相关文章:

C++ 复数运算符重载

c++ - 为什么 C++ 标准指定在具有混合符号的二进制运算中将有符号整数转换为无符号?

c# - 通过反射创建 Expression<Func<T, object>> 变量

java - 如何在 groovy 中声明方法引用?

c++ - 如何防止返回指向临时变量的指针?

c++ - 哪些编译器可以使用#include <thread> 或者换句话说,支持同样免费的 C++ 11?

c++ - 使用 std::enable_if<> 的模板特化

c++ - 如果没有在foreach循环中写 '&',为什么会出错?

lambda - 我应该将 lambda 设为静态吗?

c++ - 线性搜索的意外输出