欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > c++ 基础题目lambda

c++ 基础题目lambda

2025/3/20 4:12:49 来源:https://blog.csdn.net/qixiang2013/article/details/146316126  浏览:    关键词: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_ptrauto 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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词