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

有没有做网站的多少钱常州市建设工程网站

有没有做网站的多少钱,常州市建设工程网站,提高审美网站,织梦网站熊掌号改造怎么做C 函数对象、仿函数与 Lambda 表达式详解 在 C 中,函数对象(Function Object)、仿函数(Functor) 和 Lambda 表达式 是三种实现可调用行为的技术,它们在功能上类似,但语法和适用场景有所不同。 …

C++ 函数对象、仿函数与 Lambda 表达式详解

在 C++ 中,函数对象(Function Object)仿函数(Functor)Lambda 表达式 是三种实现可调用行为的技术,它们在功能上类似,但语法和适用场景有所不同。


一、函数对象(仿函数)

函数对象 是通过重载 operator() 的类实例,使对象可以像函数一样被调用。它本质是类对象,但行为类似函数,因此也被称为 仿函数

1. 基本用法
class Adder {
public:Adder(int n) : num(n) {}int operator()(int x) const {return x + num;}
private:int num;
};int main() {Adder add5(5);cout << add5(3); // 输出 8
}
  • Adder 类重载了 operator(),实例 add5 可以像函数一样调用。
  • 优点:可以保存状态(如成员变量 num),比函数指针更灵活。
2. 应用场景
  • STL算法:如 std::sortstd::transform 需要传入自定义逻辑时。
  • 需要状态的函数:例如计数器、累加器等。
  • 模板元编程:作为策略类传递。

二、Lambda 表达式

Lambda 表达式 是 C++11 引入的匿名函数,语法简洁,可捕获上下文变量。编译器会将其转换为匿名函数对象。

1. 基本语法
[捕获列表](参数列表) -> 返回类型 { 函数体 }
  • 捕获列表:指定如何捕获外部变量(值捕获 [x]、引用捕获 [&x]、隐式捕获 [=][&])。

  • mutable:允许修改按值捕获的变量(默认 const)。

  • 示例

    auto add5 = [num=5](int x) { return x + num; };
    cout << add5(3); // 输出 8
    
2. 底层实现

Lambda 会被编译为一个匿名类,类似仿函数:

// 编译器生成的类
class __AnonymousLambda {
public:__AnonymousLambda(int n) : num(n) {}int operator()(int x) const { return x + num; }
private:int num;
};
3. 高级特性
  • C++14:支持泛型 Lambda(参数用 auto)。

    auto print = [](auto x) { cout << x; };
    
  • C++20:支持模板 Lambda 和 [=, this] 显式捕获 this


三、函数对象 vs Lambda 表达式
特性函数对象Lambda 表达式
语法复杂度需要显式定义类内联匿名,语法简洁
状态管理通过成员变量保存状态通过捕获列表管理外部变量
重载 operator()支持多个重载版本单一函数体,不支持重载
性能通常可内联,高效同函数对象,编译器优化
适用场景复杂逻辑、需要复用的操作简单、一次性使用的逻辑

四、选择建议
  • 使用 Lambda:当逻辑简单、临时使用,或需要捕获局部变量时。
  • 使用函数对象:当需要复用逻辑、维护复杂状态,或需要重载 operator() 时。

五、示例对比
1. 排序比较器

仿函数实现

struct Compare {bool operator()(int a, int b) const { return a > b; }
};
vector<int> vec {3, 1, 4};
sort(vec.begin(), vec.end(), Compare());

Lambda 实现

sort(vec.begin(), vec.end(), [](int a, int b) { return a > b; });
2. 带状态的累加器

仿函数实现

class Counter {int count = 0;
public:int operator()() { return ++count; }
};
Counter cnt;
cout << cnt() << cnt(); // 输出 1 2

Lambda 实现

auto counter = [count=0]() mutable { return ++count; };
cout << counter() << counter(); // 输出 1 2

六、总结
  • 函数对象/仿函数:适合复杂、可复用的逻辑,或需要重载的场景。
  • Lambda 表达式:适合简单、临时的操作,尤其是需要捕获上下文时。
  • 底层一致性:Lambda 本质是编译器生成的函数对象,二者性能相同。

文章转载自:

http://kt7wtsWs.ggnjq.cn
http://tvYS8I44.ggnjq.cn
http://rvS80ND1.ggnjq.cn
http://Hpp19eXc.ggnjq.cn
http://chcww1zg.ggnjq.cn
http://Aszlbj5M.ggnjq.cn
http://WCEPoBuP.ggnjq.cn
http://4t4tk0M3.ggnjq.cn
http://H1yaT2T9.ggnjq.cn
http://0r2wOp4f.ggnjq.cn
http://HlVPYjIC.ggnjq.cn
http://KMFAJPTb.ggnjq.cn
http://C6KxHzwR.ggnjq.cn
http://rdOasgo2.ggnjq.cn
http://hm8JupCU.ggnjq.cn
http://2pavq6af.ggnjq.cn
http://D0wR4QKB.ggnjq.cn
http://UOOTkAzl.ggnjq.cn
http://f2PCNRJl.ggnjq.cn
http://SN3Tb87C.ggnjq.cn
http://GRZMF6FD.ggnjq.cn
http://C5K64eRh.ggnjq.cn
http://gqpnGO1V.ggnjq.cn
http://eZZdg5tm.ggnjq.cn
http://aBp9XCjx.ggnjq.cn
http://0ChvRtQl.ggnjq.cn
http://70YIGXlc.ggnjq.cn
http://eHC4fGFq.ggnjq.cn
http://auGaDOCc.ggnjq.cn
http://pEuz5fi1.ggnjq.cn
http://www.dtcms.com/wzjs/674292.html

相关文章:

  • 蓝色大气网站源码济南手机网站设计
  • 济南网站设计制作公司十档行情免费软件
  • 中国空间站建成时间微网站建设网站
  • 网页.网站.主页.网址.域名有什么联系wordpress添加dplayer
  • 上虞网站建设公司怎么做快三一模一样的网站
  • 南靖网站建设wordpress多语言无效
  • 深圳工程建设网站百度关键词挖掘工具爱站网
  • 网站查询备案信息php网站建设
  • 网站建设中html5模板wordpress 多商户
  • 雕刻业务网站怎么做如何建设个人网站
  • wordpress生成海报图片商丘seo公司甄选24火星
  • Seo建设网站的步骤郑州建设信息
  • 找公司做网站需要注意app模板
  • 企业网站开发注册国内大的网站建设公司排名
  • 东莞凤岗企业网站建设推广linux网站建设模板
  • 爱站网长尾关键词挖掘工具下载房产中介网站建设模板
  • python 网站开发教程在网站怎么做收款二维码
  • 邯郸市瑞荣网络科技有限公司宁波关键词优化企业网站建设
  • dede响应式网站模板wordpress随机
  • 做外贸网站柠檬logo
  • 网站怎么做图片链接360免费wifi官网
  • 提供营销型网站价格企业快速建站
  • 抓好门户网站 建设重庆网站建设有佳网络
  • 营销网站建设hanyous广告平面设计师
  • 中国循环经济网站开发与设计安阳网站怎么优化
  • 东莞微信网站建设信息c 可以用来做网站吗
  • 网站建设中英文版硬件工程师需要学哪些
  • 微信团购网站怎么做网销怎么找客户资源
  • 厦门住房建设局网站首页网站建设net接口
  • 某公司网站建设策划书成都设计公司尹超简历