当前位置: 首页 > article >正文

c++ 基础题目lambda

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 那样推导变量的类型

int x = 5;
double y = 2.5;
decltype(x + y) z = x + y;  // decltype(x + y) 等同于 double
std::cout << z << std::endl;  // 输出 7.5

2. 什么样的lambda不能复制给function

1. 捕获非复制对象的 lambda

std::unique_ptr<int> ptr = std::make_unique<int>(42);

    // 捕获了一个不可复制的对象 std::unique_ptr
    auto lambda = [ptr]() { return *ptr; };

std::unique_ptr<int> 是不可复制的,它的移动语义导致 lambda 无法被复制。因此,std::function 也无法复制该 lambda ,可以改为捕获指针或其他可复制的对象。

auto lambda = [ptr = std::move(ptr)]() { return *ptr; };

2.捕获了外部局部变量,并且该变量是不可复制的(例如,捕获了一个带有删除拷贝构造函数的类型),就不能将其赋值给 std::function

#include <iostream>
#include <functional>

struct NonCopyable {
    NonCopyable() = default;
    NonCopyable(con

http://www.kler.cn/a/592084.html

相关文章:

  • 【前端小组件实现】 鼠标经过标签元素显示,另一个元素宽度改变。float,inline-block,block
  • template mixin对装饰器设计模式的实现
  • 海康SDK协议在智联视频超融合平台中的接入方法
  • python开发订单查询功能(flask+orm bee)
  • 一文读懂 EtherNET/IP 转 Modbus RTU 网关
  • 蓝桥杯刷题day1:温度转换
  • SpacetimeDB 1.0 正式发布,Rust 编写的开源关系型数据库
  • 高并发场景下的淘宝API优化:如何设计商品数据采集系统?
  • 深入理解数据库:从概念到MySQL应用
  • docker安装node部分问题
  • Linux下OpenCFD-SCU源码编译安装及使用
  • C++反向迭代器
  • Unity导出WebGL
  • $.ajax的contentType设置及对应后端数据获取方式
  • 如何取消GitHub Copilot订阅付费?
  • 制造业数字化转型,汽车装备制造企业数字化转型案例,智能制造数字化传统制造业数字化制造业数字化转型案例
  • PyTorch深度学习框架60天进阶学习计划 - 第22天:命名实体识别实战
  • <link>标签在网页中的常见用途及与<script>标签引入资源方式的区别
  • Nodejs使用redis
  • 【QT】编写 QT Hello World程序 对象树 Qt 编程事项