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

网站建设要注意一些什么建设网站的安全性

网站建设要注意一些什么,建设网站的安全性,京东网站设计代码,结婚证app制作软件一直想写一篇文章#xff0c;来总结lambda表达式#xff0c;但是之前感觉总结的不是特别到位#xff0c;现在看了几篇文章和视频后#xff0c;感觉对lambda表达式有了比较深刻的认识#xff0c;现在进行记录总结如下#xff1a; lambda表达式又叫做匿名函数#xff0c;…一直想写一篇文章来总结lambda表达式但是之前感觉总结的不是特别到位现在看了几篇文章和视频后感觉对lambda表达式有了比较深刻的认识现在进行记录总结如下 lambda表达式又叫做匿名函数lambda表达式本质是一个匿名类lambda为了我们能更方便的定义出一个函数方法提供了便利下面咱们开始介绍下lambda表达式。 1.lambda表达式的引出 首先我们想完成一个   Add的函数这个函数有个功能就是把自己成员变量的值num_,和传进来的参数x相加并且返回。我们一般用C的写法如下 #includetypeinfo #includeiostream #includefunctional using namespace std; class Cal{ public: Cal(int num):num_(num){coutnum_ :num_endl; }; int Add(int x){ coutxnum_:xnum_endl;return xnum_; }; private:const int num_; };int main(){Cal temp(5);temp.Add(3);return 0; } 编译并且执行程序 zhcubuntu:~/test/linux$ g -stdc14 test.cpp -o test ./test num_ :5 xnum_:8 接下来我们用仿函数来实现仿函数也就是重载小括号  ()的类我们修改代码如下 #includememory #includetypeinfo #includeiostream #includefunctional using namespace std; class Cal{ public: Cal(int num):num_(num){coutnum_ :num_endl; }; int operator () (int x){ coutxnum_:xnum_endl;return xnum_; } private:const int num_; }; int main(){Cal Add(5);Add(3);return 0; }编译并且输出结果 zhcubuntu:~/test/linux$ g -stdc14 test.cpp -o test ./test num_ :5 xnum_:8也就是说如果我们想实现一个简单的Add函数也要定义一个类或者用成员函数实现或者用仿函数实现有没有一种写法上更简单的方式呢省略掉类的定义那么我们的主角就要登场了就是lambda表达式.看如下代码: #includememory #includetypeinfo #includeiostream #includefunctional using namespace std; int main(){int num5;auto lam_add[num](int x) -int {coutnumx:numxendl;return numx;}; lam_add(3);return 0; } 是不是形式上简洁了许多输出结果如下 zhcubuntu:~/test/linux$ g -stdc14 test.cpp -o test ./test numx:8 正如我们的lambda表达式结果看这个跟我们刚才写的仿函数类也是基本相同的实际上我写的第二个例子就是这个lambda表达式在调用的时候生成的临时类对象所对应的类的定义 注意我的成员变量的写法const int num_,这个是我故意这么写的因为确实等价方式就是这样。下面我们来讲一讲lambda表达式的捕获列表以及不同捕获形式在生成类的成员函数里的可读可写属性。 2. lambda表达式的捕获列表 lambda表达式的书写形式如下 [captrue] (params) opt - ret {body}; 其中capture是捕获列表params是参数列表 opt是函数选项mutable,noexcept等关键字 ret是返回值类型body是函数体。 lambda表达式可以通过捕获列表捕获一定范围内的变量 []不捕获任何变量 [bar]按值捕获bar变量同时不捕获其他变量并作为副本在函数体使用按值捕获; [bar]按引用捕获bar变量同时不捕获其他变量并作为引用在函数体使用按引用捕获 []捕获外部作用域作用变量并作为副本在函数体使用按值捕获; []捕获外部作用域所有变量并作为引用在函数体使用按引用捕获 [,foo]按值捕获外部作用域所有变量并按引用捕获foo变量 [this]捕获当前类中的this指针让lambda拥有和当前类成员函数同样的访问权限如果已经使用了或者就默认添加此选项。捕获this的目的是可以在lambda中使用当前类的成员函数和成员变量。 一般不会捕获全局变量静态全局变量局部静态局部变量静态成员变量。 下面我们按照按值捕获和按引用捕获来说明下捕获后在生成的匿名类里的成员变量情况与外部变量的可写属性是否相同以及是否能够改变外部变量。 下面咱们看下具体的例子 #includememory #includetypeinfo #includeiostream #includefunctional using namespace std; int main(void){ int m1; const int n2; auto g [m,n](int x)-int{ m; n; return mn;}; int zg(0); return 0; } 编译代码并且执行编译报错如下 zhcubuntu:~/test/linux$ g -stdc14 test.cpp -o test ./test test.cpp: In lambda function: test.cpp:10:2: error: increment of read-only variable ‘m’m;^~ test.cpp:11:2: error: increment of read-only variable ‘n’n;^~ 具体结论相关的东西见下面的两个图说的更清楚一些。 这个图是我从别的地方copy过来的暂时粘贴这里后期再敲试验代码。 如果我们想改变这个   m,p的可写属性可以在    lambda表达式中加入mutalbel关键字。 我画红线的部分是原文书写错误应该是有mutable时。 这里强调一点这个  const int n,在用这个mutable以后那么对应的成员变量还是  const int n ,也就是说这个属性是拿 mutable改变不了的。 3.lambda表达式中的  准函数准对象如何接收lambda表达式 当一个lambda表达式没有捕获任何外部变量时则可以看成一个准函数如果捕获了外部对象则可以看成一个准对象。具体见下面图片。 那么对于这种准对象的情况我们是怎么接呢c  11中推出了std::function   模板类它即能接准函数的情况也能接准对象的情况。下面我们来简单的介绍下std::function. std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。std::function对象是对C中现有的可调用实体的一种类型安全的包裹我们知道像函数指针这类可调用实体是类型不安全的。 std::function包含于头文件 #includefunctional 中可将各种可调用实体进行封装统一包括 普通函数lambda表达式函数指针仿函数(functor 重载括号运算符实现)类成员函数静态成员函数 其中具体的使用方式这里其他的就不再举例子因为在我的另外一个文章中有介绍。这里就说一个lambda表达式的例子 #includememory #includeiostream #includefunctional #includemap #includestring using namespace std;class SaveStuInfo{ public:void SaveInfo(const string num,std::functionstring(const string,const string) callback){student_info.insert(make_pair(num,callback)); }void CallLmd(const string num){string name zhc;string score 100;student_info[num](name,score); } private:using get_name_score std::functionstring(const string ,const string );std::mapstd::string, get_name_score student_info; //num as key};int main(void){ string num123; //string name zhc; //string score100; auto lmd [](const stringname,const stringscore) -string{coutlmd was called value: namescoreendl;return namescore; }; SaveStuInfo temp; temp.SaveInfo(num,lmd); temp.CallLmd(num); return 0; } 这里要注意一点在temp.SaveInfo(num,lmd),这个时候不要写成temp.SaveInfo(num,lmd(name,score));这样会报错换句话说std::function里不用存储具体的lambda参数里的值真正传递的lambda参数是在调用这个lambda表达式的时候。 编译并且执行程序结果如下 zhcubuntu:~/test/linux$ g -stdc14 test.cpp -o test ./test lmd was called value: zhc100
http://www.hkea.cn/news/14561205/

相关文章:

  • 如何做自己的网站保康县城乡建设路网站
  • 做视频网站要多大的带宽个人网站的设计与实现结论
  • 网站开发无形资产成都网站建设培训学校
  • 网站流量的做免费 wordpress
  • 星锐网站建设wordpress自动评论插件
  • word做网站连接免费软件漫画
  • 电商网站开发工具网站开发的实验心德
  • 国内免费注册二级域名的网站微信公众平台开发者工具
  • 做私活一个网站大概多少钱个人做论坛网站需要哪些备案
  • 店铺营业执照在哪个网站做年审深圳有好软件有限公司
  • 大同百度做网站多少钱开发个微网站多少钱
  • 关于网站设计的书永久免费wifi
  • 域名网站账号如何做二手车网站
  • 钢材销售都在哪个网站做做网站的公司
  • 网站模板d一品资源网做准考证的网站
  • 主流的网站开发技术有北辰苏州网站建设
  • 企业网站设计建设长春外国购物网站大全
  • 成都 专业 网站建设江苏省建筑信息平台
  • 双语版网站小程序注册开发流程
  • 网站怎么添加滤镜功能吗面向网站开发的相关知识
  • 网站名称与备案名称不一致前程无忧深圳招聘网站
  • 用手机建立自己的网站网站建设应该怎么做
  • 网站上线稳定后的工作怎样做一个好的网页
  • 做公司网站找谁怎么在百度推广自己的公司
  • 网站机房建设流程建设局网站安徽
  • 青岛建站合作用织梦搭建网站
  • 震旦集团网站建设合肥简川科技网站建设公司 概况
  • 做seo的网站是怎么样的北京网站怎么建设
  • 四川二级站seo整站优化排名wordpress 音乐播放器插件
  • 网站制作常见问题 图片版权营销型网站 案例