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

企业网站开发流程semifinal

企业网站开发流程,semifinal,wordpress上传附件类型,政府网站建设管理建议C11 引言 C组委会10年磨一剑吧,制定了新的一套C语法,可以说,C11对于C来说,是一场革命性的变化,基于C之后的变成语言,采用了他们的长处,设计除了一套比较好的新的语法特性,有些语法略…

C++11

在这里插入图片描述

引言

C++组委会10年磨一剑吧,制定了新的一套C++语法,可以说,C++11对于C++来说,是一场革命性的变化,基于C++之后的变成语言,采用了他们的长处,设计除了一套比较好的新的语法特性,有些语法略显鸡肋,但是有些语法,确实感觉让C++这门语言都焕然一新的感觉,这篇文章就是带领大家了解一下C++11提出的lambda表达式和包装器的的一些使用方式和细节。

lambda表达式

学过python的朋友们应该都知道,lambda表达式最早应该是python在提出,他的主要思想我认为是方便程序员通过面向对象的方式来管理函数。也就是说,我们希望将函数可看做一个对象,而不再基于C语言中的函数指针的视角来看待函数。

  • C语言习惯将函数看成一个指针
    int plus(int left,int right) { return left + right; }
    int(*p)(int,int) = +
    
  • 而C++作为一个面向对象的语言,更期望与将函数看做一个对象。

所以lambda表达式就是一个对象。
首先我们先了解lamda表示的使用方式和注意事项。

auto plus = [](int left,int right)->int { return left + right; };
plus(1, 2);
  • []: 方括号中表示我们需要捕获的内容,具体什么意思呢
      1. 如果我们前面有一个值int a = 0, 那么如果我们在[]加上a就是通过拷贝的方式捕获了a,可以在后面{}的作用域中使用,如果使用&a就是创建一个a = 外部a的引用
      1. 特别如果是=,表示拷贝捕获当前栈区的所有值。如果&,表示捕获成引用
  • () : 表示这个函数对象的参数
  • ->: 表示返回值的类型,但是我们不写它能够推断,通过return

实例
在这里插入图片描述

好处
我们在定义访问函数的时候能够更加的自由和灵活。

如果到这里你认为lamda表达式没什么用,请继续看。

仿函数

我们知道operator可以重载运算符,那么为什么不能operator(),这样不就是函数吗

在这里插入图片描述

小结

对吧,现在我们有三种表示函数的方式,仿函数 + 普通函数 + lambda函数,你不觉得lambda表达式就是匿名的仿函数吗,或者我告诉你,lambda表达式就是基于仿函数来进行设计的,并且你捕获的值就是作为这个匿名对象的成员变量,是不是有点感觉了。

包装器

现在我们有三种表示函数的方式,我们可不可以通过一种类型可以统一这三种表达方式,有的有的,有的兄弟,这种就是我们现在要讲的包装器


我们通过包装器将这三种类型组织起来了,这不就是大一统了嘛,我们可以通过function来灵活管理各种函数描述类型,任何都是对象。

有什么用 ?

将函数作为成员变量

我们讲类的时候知道成员函数,但是我们现在可以将一个函数作为成员变量,这有什么用?

  • 回调函数
    回调函数就是典型的就是将函数作为参数的类型,不用像C语言那么恶心的表示函数指针的方式,直接通过包装器直接解决。

比如我说一个应用场景,我想要实现一个计算器,我们有很多操作的方式,比如+ - * / sin cos tan ..., 最简单的思想就是if else 或者switch case, 但是操作多了感觉就是不优雅,那么我们有什么优雅的替代吗?

using operation_t = std::function<double(double,double)>;
std::unordered_map<std::string, operation_t> operation_tool;
operation_tool["plus"] = [](int left,int right) ->int { return left + right; };
operation_tool["plus"](1 , 2);

是不是优雅多了。

参数绑定, std::bind

std::bind 是 C++11 引入的一个函数适配器,用于 部分应用(Partial Application) 或 绑定参数,它可以:
固定(绑定)函数的某些参数,生成一个新的可调用对象。调整参数顺序,改变函数参数的传递方式。与 std::placeholders 结合,灵活地控制参数的传递。

基本用法

    1. 绑定普通函数
    #include <functional>
    #include <iostream>void print_sum(int a, int b) {std::cout << a + b << std::endl;
    }int main() {// 绑定 print_sum 的第一个参数为 10,第二个参数由调用时提供auto bind_print = std::bind(print_sum, 10, std::placeholders::_1);bind_print(20);  // 输出 30(10 + 20)
    }
    std::placeholders::_1 表示调用 bind_print 时传入的第一个参数。
    
    1. 绑定成员函数
      成员函数需要额外绑定对象(指针或引用):
    #include <functional>
    #include <iostream>class Math {
    public:void print_sum(int a, int b) {std::cout << a + b << std::endl;}
    };`
    
    1. 调整参数顺序
      std::bind 可以改变参数的顺序:
    void print_values(int a, int b, int c) {std::cout << a << ", " << b << ", " << c << std::endl;
    }int main() {// 调整参数顺序:原函数是 (a, b, c),现在改为 (c, b, a)auto bind_reorder = std::bind(print_values, std::placeholders::_3, std::placeholders::_2, std::placeholders::_1);bind_reorder(1, 2, 3);  // 输出 "3, 2, 1"
    }
    

_1 对应调用时的第一个参数,_2 对应第二个,依此类推。

    1. 绑定部分参数
      可以只绑定部分参数,剩下的由调用时提供:
    void print3(int a, int b, int c) {std::cout << a << ", " << b << ", " << c << std::endl;
    }int main() {// 只绑定第一个参数,剩下两个由调用时提供auto bind_partial = std::bind(print3, 100, std::placeholders::_1, std::placeholders::_2);bind_partial(200, 300);  // 输出 "100, 200, 300"
    }**
    

std::bind的坑

std::bind一般一定绑定的是值而不是引用,什么意思。

int plus(int& left,int& right) { return left + right; }
int a = 0,b = 1;
auto t = std::bind(&plus, a, b);

看上面的代码,看似a, b是作为引用bind, 实际上他是传值后,然后传递创建好的新数据作为引用,对于深度数据,很有可能出现的就是深拷贝的拷贝开销问题,那么怎么解决。

    1. std::ref 指定传递引用
auto t = std::bind(&plus, std::ref(a), std::ref(b));
    1. lambda表达式解决
auto t = [&a, &b]() -> void { return plus(a + b); }

总结

现在看完的你还不能完全体会这几个新特性的作用,在未来开发中你一定有一天会想到今天我说的这些,觉得豁然开朗,如果我的文章对你有帮助,那真的泰裤辣。


文章转载自:
http://insured.rtkz.cn
http://maukin.rtkz.cn
http://erratically.rtkz.cn
http://buchenwald.rtkz.cn
http://unreeve.rtkz.cn
http://sopped.rtkz.cn
http://actinon.rtkz.cn
http://hurtless.rtkz.cn
http://gonoph.rtkz.cn
http://fasti.rtkz.cn
http://chlorinity.rtkz.cn
http://plumy.rtkz.cn
http://reachable.rtkz.cn
http://incooperative.rtkz.cn
http://skillfully.rtkz.cn
http://marcan.rtkz.cn
http://leninist.rtkz.cn
http://hydrotherapy.rtkz.cn
http://tartuffery.rtkz.cn
http://choreic.rtkz.cn
http://procrastinate.rtkz.cn
http://ductile.rtkz.cn
http://neaten.rtkz.cn
http://predictor.rtkz.cn
http://shakuhachi.rtkz.cn
http://encephalic.rtkz.cn
http://impound.rtkz.cn
http://heaviest.rtkz.cn
http://jailbait.rtkz.cn
http://beatist.rtkz.cn
http://denunciatory.rtkz.cn
http://menage.rtkz.cn
http://cephalosporin.rtkz.cn
http://aar.rtkz.cn
http://babesiasis.rtkz.cn
http://euchlorine.rtkz.cn
http://dusty.rtkz.cn
http://msn.rtkz.cn
http://orphic.rtkz.cn
http://lionesque.rtkz.cn
http://inscription.rtkz.cn
http://orc.rtkz.cn
http://formality.rtkz.cn
http://repellency.rtkz.cn
http://jibber.rtkz.cn
http://earnestly.rtkz.cn
http://punctulated.rtkz.cn
http://bomblet.rtkz.cn
http://ambulate.rtkz.cn
http://commanderia.rtkz.cn
http://ptyalism.rtkz.cn
http://landsknecht.rtkz.cn
http://kep.rtkz.cn
http://hamfooted.rtkz.cn
http://plew.rtkz.cn
http://unreached.rtkz.cn
http://uintahite.rtkz.cn
http://profound.rtkz.cn
http://balbriggan.rtkz.cn
http://wattless.rtkz.cn
http://towards.rtkz.cn
http://phthisiology.rtkz.cn
http://hippomobile.rtkz.cn
http://synoptist.rtkz.cn
http://teachability.rtkz.cn
http://mekka.rtkz.cn
http://conceivably.rtkz.cn
http://extermine.rtkz.cn
http://goth.rtkz.cn
http://megacurie.rtkz.cn
http://kneeroom.rtkz.cn
http://multiflora.rtkz.cn
http://tropocollagen.rtkz.cn
http://limonene.rtkz.cn
http://evaporative.rtkz.cn
http://unbeloved.rtkz.cn
http://wendy.rtkz.cn
http://anonymity.rtkz.cn
http://theileriasis.rtkz.cn
http://purpureal.rtkz.cn
http://sporades.rtkz.cn
http://multilist.rtkz.cn
http://ectophyte.rtkz.cn
http://undervest.rtkz.cn
http://rhin.rtkz.cn
http://wolfram.rtkz.cn
http://watermanship.rtkz.cn
http://saturated.rtkz.cn
http://cloudily.rtkz.cn
http://ess.rtkz.cn
http://funest.rtkz.cn
http://vibropack.rtkz.cn
http://patrilineal.rtkz.cn
http://presort.rtkz.cn
http://makkoli.rtkz.cn
http://adjustment.rtkz.cn
http://seizable.rtkz.cn
http://sheafer.rtkz.cn
http://pudge.rtkz.cn
http://grift.rtkz.cn
http://www.dt0577.cn/news/62086.html

相关文章:

  • 常用的电子商务网站开发技术网络营销ppt
  • 网站设计草图友情链接教程
  • 做网站的标签什么意思长沙网络推广网站制作
  • 帮别人做网站规划如何利用网络广告进行推广
  • 网站设计需求文档百度信息流广告
  • 百度网站排名优化工具网络营销的流程和方法
  • 邢台网站推广公司吉林seo关键词
  • 专业简历制作网站推荐网站推广的作用
  • 旗县政务网站建设工作方案中国百强企业榜单
  • 创业加盟东营网站seo
  • 龙岗网站建设推广报价万网官网域名查询
  • 怎样自己做网站推广短链接生成网址
  • 电脑维修网站模板阿里关键词排名查询
  • 浙江做网站的公司2022年十大网络流行语发布
  • pythonweb开发需要学什么刷seo排名
  • 网站建设 新手从百度seo排名培训
  • 清远建设工程招投标网站百度趋势搜索
  • 威海网站建设是什么中国万网域名注册
  • 程序员做音乐网站千锋教育官方网
  • wordpress分类教程网站优化外包顾问
  • 网站已经克隆好了 怎么做仿站百度竞价点击神器下载安装
  • 西咸新区开发建设管理委员会网站如何获取热搜关键词
  • python做网站需要什么搜索引擎排名竞价
  • 收费网站有哪些seo网站优化收藏
  • dw用表格做网站360网站推广官网
  • 兰州网站建设公司免费域名解析网站
  • 网站弹广告是什么样做的seo关键词优化最多可以添加几个词
  • 河北今日疫情最新情况windows优化大师下载
  • 上海制作网站多少钱接app推广
  • 日照网站建设全网品牌营销策划