模板引用内部函数绑定机制,R转义字符,C引用包装器,别名,模板元,宏,断言,C多线程,C智能指针

转义字符  时间:2021-04-20  阅读:()

1、引用内部函数绑定机制

#include<iostream>

#include<functional>u s ingnamespac est d;usingnamespacestd: :placeholders;

//仿函数创建一个函数指针 引用一个结构体内部或者一个类内部的共有函数structMyStruct

{voidadd(inta)

{cout<<a<<endl ;

}voidadd2(inta, intb)

{cout<<a + b<<endl;

}voidadd3(inta, intb, intc)

{cout<<a + b + c<<endl;

}

} ;voidmain()

{

MyStructstruct1;

//auto自动变量地址 函数指针 bind绑定

//第一个参数引用内部函数绑定一个实体对象

//这里后面的_1等为占位用autofunc = bind(&MyStruct: :add, &struct1, _1) ;autofunc2 = b ind(&MyStruct: :add2, &struct1, _1, _2) ;autofunc3 = b ind(&MyStruct: :add3, &struct1, _1, _2, _3) ;f unc(100) ;f unc 2(10, 20) ;f unc 3(10, 20, 30) ;cin. get() ;

}voidmain1()

{

//如果想通过另外一种方式获得结构体中的函数还可以通过下面的方式

MyStructstruct1;

//创建函数指针类结构体数据私有代码共享

//函数通过调用调用需要传递对象名进行区分void(MyStruct: :*p) (inta) =&MyStruct: :add;cin. get() ;

}

补充Cocos2dx中关于std: :function和bind的用法案例

2.通过R”()”的方式实现转义字符

#include<iostream>

#include<string>

#include<stdlib.h>voidmain()

{std: :stringpath = R"( "C:\Program Files\Tencent\QQ\QQProtect\Bin\QQProtect. exe")";//通过R"()" 括号之间去掉转义字符system(path.c_str() ) ;system("pause") ;

}

3.引用包装器通过std: :ref(count) 的方式调用。

#include<iostream>template<classT>voidcom(Targ) //模板函数 引用无效 引用包装器

{std: :cout<<"com ="<<&arg<<"\n";arg++;

}voidmain()

{intcount = 10;int&rcount = count;com(count) ;std: :cout<<count<<std: :endl;

//std: :ref(变量)  函数模板,引用包装器

//com(std: :ref(count)) ;c om(rcount) ;std: :cout<<"main="<<&rcount<<"\n";std: :cout<<count<<std: :endl;std: :cin.get() ;

}

使用引用包装器的方式

#include<iostream>template<classT>voidcom(Targ)//模板函数 引用无效引用包装器

{std: :cout<<"com ="<<&arg<<"\n";arg++;

}voidmain()

{intcount = 10;int&rcount = count;com(count) ;std: :cout<<count<<std: :endl;

//std: :ref(变量)  函数模板,引用包装器com(std: :ref(count) ) ;//这种方式代表引用包装器

//com(rcount) ;std: :cout<<"main="<<&rcount<<"\n";std: :cout<<count<<std: :endl;std: :cin.get() ;

}

4.C++别名

#include<iostream>namespacespace{ //隔离模板避免冲突template<classT>usingprt = T*;//模板的简写定义一个模板的指针}intadd(inta, intb)

{returna + b;

}

//typedef是C语言中定义别名的关键字typedef int(*ADD) (inta, intb) ;

//C++中的别名是通过using关键字实现的usingFUNC = int(*) (inta, intb) ;usingco = std: :ios_base: :fmtflags;

voidmain()

{

ADDp = add;std: :cout<<p(1, 2) <<std: :endl;

FUNC func = add;std: :cout<<func(1, 2) <<std: :endl;

//space: :ptr<int>pint(new int(15)) ;

//std: :cout<< *pint << " " << pint <<std: :endl;std: :cin.get() ;

}

5.模板元

#include<iostream>

//主要思想

//

//利用模板特化机制实现编译期条件选择结构利用递归模板实现编译期循环结构模板元程序则由编译器在编译期解释执行。

//

//优劣及适用情况

//

//通过将计算从运行期转移至编译期在结果程序启动之前做尽可能多的工作最终获得速度更快的程序。也就是说模板元编程的优势在于

//

//1.以编译耗时为代价换来卓越的运行期性能一般用于为性能要求严格的数值计算换取更高的性能 。通常来说一个有意义的程序的运行次数或服役时间总是远远超过编译次数或编译时间 。//

//2.提供编译期类型计算通常这才是模板元编程大放异彩的地方。

//

//模板元编程技术并非都是优点

//

//1.代码可读性差 以类模板的方式描述算法也许有点抽象。

//

//2.调试困难元程序执行于编译期没有用于单步跟踪元程序执行的调试器用于设置断点、察看数据等 。程序员可做的只能是等待编译过程失败然后人工破译编译器倾泻到屏幕上的错误信息。//

//3.编译时间长通常带有模板元程序的程序生成的代码尺寸要比普通程序的大

//

//4.可移植性较差对于模板元编程使用的高级模板特性不同的编译器的支持度不同。

//模板元把运行时消耗的时间在编译期间优化template<intN>structdata

{enum {res = data<N - 1>: :res + dat a<N - 2>: :re s } ;} ;

//当为1的情况template<>structdata<1>

{e num {r e s = 1} ;

} ;template<>structdata<2>

{e num { r e s = 1 } ;

} ;intgetdata(intn)

{if (n == 1 | | n == 2)

{return 1;

}else

{returngetdata(n - 1) + getdata(n - 2) ;

}

}voidmain()

{constintmyint = 40;i ntnum = data<my int>: :res;//<>内部不可以有变量std: :cout<<num<<std: :endl ;std: :cout<<getdata(40) <<std: :endl ;std: :cin.get() ;

}

运行结果相同但是后者明显速度要慢于前者。

6.宏

#include<stdio.h>

#include<assert.h>

#include<iostream>u s ingnamespac est d;

#def ineN 10voidmain()

{i ntnum = 100;c out<<num<<endl;

//本文件所在的文件路径cout<<__FILE__<<endl;

//下一行代码在文件中的行位置cout<<__LINE__<<endl;

//日期c out<<__DATE__<<end l;

//日期cout<<__TIME__<<endl;

//当前函数名称cout<< __FUNCTION__ <<endl;cin. get() ;

}

7.断言调试注意static_assert这个是C++11的语法在QT中运行需要加上CONFIG+=C++11

这时候没有输入东西

8.C++中的多线程

#inc lude<thread>

#include<iostream>

#inc lude<windows.h>

#include<vector>u s ingnamespac est d;usingnamespacestd: :thi s_thread;voidmsg()

{

MessageBoxA(0, "12345", "678910",0) ;

}voidmsgA(intnum)

{std: :cout<<get_id() <<" num = "<<num<<std: :endl;

}voidmain()

{

// thread: :hardware_concurrency线程auton = thread: :hardware_concurrency() ;//获得当前cpu核心数我的是4核的std: :cout<<n<<std: :endl;

//获取当前线程编号std: :cout<<"thread = "<<get_id() <<std: :endl;threadthread1 (ms g) ; //创建多线程threadthread2(ms g) ;thread1. join() ;//开始执行

inux国外美老牌PhotonVPS月$2.5 ,Linux系统首月半价

PhotonVPS 服务商我们是不是已经很久没有见过?曾经也是相当的火爆的,我们中文习惯称作为饭桶VPS主机商。翻看之前的文章,在2015年之前也有较多商家的活动分享的,这几年由于服务商太多,乃至于有一些老牌的服务商都逐渐淡忘。这不有看到PhotonVPS商家发布促销活动。PhotonVPS 商家七月份推出首月半价Linux系统VPS主机,首月低至2.5美元,有洛杉矶、达拉斯、阿什本机房,除提供普...

亚州云-美国Care云服务器,618大带宽美国Care年付云活动服务器,采用KVM架构,支持3天免费无理由退款!

官方网站:点击访问亚州云活动官网活动方案:地区:美国CERA(联通)CPU:1核(可加)内存:1G(可加)硬盘:40G系统盘+20G数据盘架构:KVM流量:无限制带宽:100Mbps(可加)IPv4:1个价格:¥128/年(年付为4折)购买:直达订购链接测试IP:45.145.7.3Tips:不满意三天无理由退回充值账户!地区:枣庄电信高防防御:100GCPU:8核(可加)内存:4G(可加)硬盘:...

PacificRack - 洛杉矶QN机房 低至年$7.2 同有站群多IP地址VPS主机

需要提前声明的是有网友反馈到,PacificRack 商家是不支持DD安装Windows系统的,他有安装后导致服务器被封的问题。确实有一些服务商是不允许的,我们尽可能的在服务商选择可以直接安装Windows系统套餐,毕竟DD安装的Win系统在使用上实际上也不够体验好。在前面有提到夏季促销的"PacificRack夏季促销PR-M系列和多IP站群VPS主机 年付低至19美元"有提到年付12美元的洛杉...

转义字符为你推荐
之路android支持ipadeacceleratorCentOS5.2下安装eAccelerator,怎么都装不上photoshop技术ps是一种什么技术??????ms17-010win1038度古贝春珍藏10价格?micromediamacromedia的中文名迅雷雷鸟迅雷app没有ios版本的吗?怎么回事重庆电信测速重庆电信对BT开始限制了?google搜图google的直接搜索图片的功能为什么没了ios10.0.3iphone se ios10.0.3能完美越狱吗?
tk域名注册 香港服务器租用 过期备案域名查询 阿里云os duniu bbr softlayer 美国便宜货网站 商家促销 京东商城双十一活动 域名转向 bgp双线 谁的qq空间最好看 网通服务器托管 如何安装服务器系统 免费私人服务器 网页提速 net空间 服务器防火墙 空间申请 更多