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() ;//开始执行
趣米云怎么样?趣米云是创建于2021年的国人IDC商家,虽然刚刚成立,但站长早期为3家IDC提供技术服务,已从业2年之久,目前主要从事出售香港vps、香港独立服务器、香港站群服务器等,目前在售VPS线路有三网CN2、CN2 GIA,该公司旗下产品均采用KVM虚拟化架构。由于内存资源大部分已售,而IP大量闲置,因此我们本月新增1c1g优惠套餐。点击进入:趣米云官方网站地址香港三网CN2云服务器机型活...
数脉科技怎么样?昨天看到数脉科技发布了7月优惠,如果你想购买香港服务器,可以看看他家的产品,性价比还是非常高的。数脉科技对香港自营机房的香港服务器进行超低价促销,可选择10M、30M的优质bgp网络。目前商家有优质BGP、CN2、阿里云线路,国内用户用来做站非常不错,目前E3/16GB阿里云CN2线路的套餐有一个立减400元的优惠,有需要的朋友可以看看。点击进入:数脉科技商家官方网站香港特价阿里云...
已经有一段时间没有分享阿里云服务商的促销活动,主要原因在于他们以前的促销都仅限新用户,而且我们大部分人都已经有过账户基本上促销活动和我们无缘。即便老用户可选新产品购买,也是比较配置较高的,所以就懒得分享。这不看到有阿里云金秋活动,有不错的促销活动可以允许产品新购。即便我们是老用户,但是比如你没有购买过他们轻量服务器,也是可以享受优惠活动的。这次轻量服务器在金秋活动中力度折扣比较大,2G5M配置年付...