c++ 基础标题lambda

打印 上一主题 下一主题

主题 933|帖子 933|积分 2814

1. auto lambda = [](double x) { return static_cast<int>(x); }; 是 匿名函数对象 ,不可直接声明
a.可以赋值给一个与其范例兼容的 std::function 范例的对象 std::function<int(int, int)> lambda = [](int x, int y) { return x + y; };
  b.使用详细的 lambda 范例(函数指针) int (*lambda1)(int, int) = [](int x, int y) { return x + y; };
c. 推导范例decltype([](int x, int y) { return x + y; }) lambda = [](int x, int y) { return x + y; };
decltype 用于推导一个表达式的范例,而不是像 auto 那样推导变量的范例
  1. int x = 5;
  2. double y = 2.5;
  3. decltype(x + y) z = x + y;  // decltype(x + y) 等同于 double
  4. std::cout << z << std::endl;  // 输出 7.5
复制代码

2. 什么样的lambda不能复制给function
1. 捕捉非复制对象的 lambda
  1. std::unique_ptr<int> ptr = std::make_unique<int>(42);
  2.     // 捕获了一个不可复制的对象 std::unique_ptr
  3.     auto lambda = [ptr]() { return *ptr; };
复制代码
std::unique_ptr<int> 是不可复制的,它的移动语义导致 lambda 无法被复制。因此,std::function 也无法复制该 lambda ,可以改为捕捉指针或其他可复制的对象。
  1. auto lambda = [ptr = std::move(ptr)]() { return *ptr; };
复制代码
2.捕捉了外部局部变量,而且该变量是不可复制的(例如,捕捉了一个带有删除拷贝构造函数的范例),就不能将其赋值给 std::function
  1. #include <iostream>
  2. #include <functional>
  3. struct NonCopyable {
  4.     NonCopyable() = default;
  5.     NonCopyable(con
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连全瓷种植牙齿制作中心

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表