设为首页 加入收藏

TOP

引用内部函数绑定机制,R转义字符,C++引用,别名,模板元,宏,断言,C++多线程,C++智能指针(一)
2015-07-20 17:53:44 来源: 作者: 【 】 浏览:8
Tags:引用 内部 函数 绑定 机制 转义 字符 别名 模板 断言 线程 智能 指针
??

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

#include

#include

usingnamespacestd;

usingnamespacestd::placeholders;

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

structMyStruct

{

voidadd(inta)

{

cout <

}

voidadd2(inta,intb)

{

cout <

}

voidadd3(inta,intb,intc)

{

cout <

}

};

voidmain()

{

MyStructstruct1;

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

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

//这里后面的_1等为占位用

autofunc =bind(&MyStruct::add, &struct1,_1);

autofunc2 =bind(&MyStruct::add2, &struct1,_1,_2);

autofunc3 =bind(&MyStruct::add3, &struct1,_1,_2,_3);

func(100);

func2(10, 20);

func3(10, 20, 30);

cin.get();

}

voidmain1()

{

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

MyStructstruct1;

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

//函数通过调用,调用需要传递对象名进行区分

void(MyStruct::*p)(inta) = &MyStruct::add;

cin.get();

}

\

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

#include

#include

#include

voidmain()

{

std::stringpath =R"( "C:\Program Files\Tencent\QQ\QQProtect\Bin\QQProtect.exe")";

//通过R"()" 括号之间去掉转义字符

system(path.c_str());

system("pause");

}

3.引用

#include

template

voidcom(Targ) //模板函数,引用无效,引用包装器

{

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

arg++;

}

voidmain()

{

intcount = 10;

int & rcount =count;

com(count);

std::cout << count <

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

//com(std::ref(count));

com(rcount);

std::cout << "main=" << &rcount << "\n";

std::cout << count <

std::cin.get();

}

4.C++别名

#include

namespacespace{ //隔离模板,避免冲突

template 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) <

FUNCfunc =add;

std::cout << func(1, 2) <

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

//std::cout << *pint << " " << pint << std::endl;

std::cin.get();

}

\

5.模板元

#include

//主要思想

//

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

//

//优劣及适用情况

//

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

//

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

//

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

//

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

//

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

//

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

//

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

//

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

//模板元吧运行时消耗的时间,在编译期间优化

template

structdata

{

enum {res = data ::res +data ::res };

};

//当为1的情况

template<>

structdata<1>

{

enum {res = 1};

};

template<>

structdata<2>

{

enum {res = 1 };

};

intgetdata(intn)

{

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

{

return 1;

}

else

{

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

}

}

voidmain()

{

constintmyint = 40;

intnum =data ::res;//<>内部不可以有变量

std::cout << num <

std::cout << getdata(40) <

std::cin.get();

}

\

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

6.宏

#include

#include

#include

usingnamespacestd;

#define N 10

voidmain()

{

intnum = 100;

cout <

//本文件所在的文件路径

cout <<__FILE__ <

//下一行代码在文件中的行位置

cout <<__LINE__ <

//日期

cout <<__DATE__ <

//日期

cout <<__TIME__ <

//当前函数名称

cout << __FUNCTION__ <

cin.get();

}

\

7.断言调试

\

这时候没有输入东西

\

8.C++中的多线程

#include

#include

#include<windows.h>

#include

usingnamespacestd;

usingnamespacestd::this_thread;

voidmsg()

{

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

}

voidmsgA(intnum)

{

std::cout << get_id() <<" num = " <

}

voidmain()

{

// thread::hardware_concurrency线程

auton =thread::hardware_concurrency();//获得当前核心数

std::cout << n <

//获取当前线程编号

std::cout << "thread = " <

threadthread1(msg);//创建多线程

threadthread2(msg);

thread1.join();//开始执行

thread2.join();

std::cin.get();

}

截图如下:

\

9.多线程

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇从汇编来看i++与++i 下一篇C++中的数组array和vector,lambd..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: