看过的网站做记号,上网建站,什么是网络营销产品策略,如何做谷歌优化1、C模板编程
1#xff09;函数模板
#include iostream
using namespace std;// 声明一个泛型类型T#xff0c;参数化数据类型
template typename T
// 定义一个函数模板
T man(T a, T b) {return (ab?a:b);
}int main()
{// 使用的时候没有指定参数类…1、C模板编程
1函数模板
#include iostream
using namespace std;// 声明一个泛型类型T参数化数据类型
template typename T
// 定义一个函数模板
T man(T a, T b) {return (ab?a:b);
}int main()
{// 使用的时候没有指定参数类型编译器会自动推导cout Hello World max(6, 2);return 0;
}2模板定义
template typedef T
// 使用class效果相同
// 为了不和类的定义发生歧义尽量使用typedef
template class T
// 也可以定义多个类型但是定义了一定要用否则报错
template typedef T1, typedef T23函数模板调用
显示调用
maxint,int(1, 2);隐式调用自动推导
max(1, 2);总结模板的定义相当于定义了一个占位符这个占位符在编译时确定理解为直接替换类似宏定义占位符的类型由参数来确定。 对于一个函数模板的调用因为是调用的时候能确定参数类型编译器会在编译时生成对应函数模板函数。
4类模板
#include iostream
using namespace std;// 声明一个泛型类型T参数化数据类型
template typename T1, typename T2
// 定义一个类模板
class TempClass {
public:T1 key;T2 val;
public:TempClass(T1 k, T2 v){keyk;valv;};
};int main()
{// 定义一个模板类对象指定泛型类型TempClassint, int test(5, 2);cout test.key test.val endl;// 定义一个模板类对象指定泛型类型TempClassstring, int test2(123, 2);cout test2.key test2.val endl;return 0;
}
}总结定义了模板之后在随后定义的类内部如果使用了这个模板类型那么这就是个类模板编译器在检测到使用这个类模板实例化对象之后会根据指定的参数类型得到模板类该实例就是这个模板类的实例。 由类模板实例化得到的类叫模板类。
5类内的函数模板
类内的函数模板只有在被调用的时候才会实例化这点和函数模板特性一致。
#include iostream
using namespace std;// 声明一个泛型类型T参数化数据类型
template typename T1, typename T2
// 定义一个类模板
class TempClass {
public:T1 key;T2 val;
public:TempClass(T1 k, T2 v){keyk;valv;};// 定义一个类内函数模板void PT(T2 a){cout PT a;};
};int main()
{// 定义一个模板类对象指定泛型类型TempClassint, int test(5, 2);test.PT(666);return 0;
}注意模板类型在对象定义的时候就确定了调用类内模板函数的时候类型要一致。
C函数模板的详细讲解 C类模板模板类详解 在线测试代码 2、C标准模板库
1、STL 是 C 标准库的一部分 2、STL 就是借助模板把常用的数据结构及其算法都实现了一遍并且做到了数据结构和算法的分离。
1容器
图片来源软件技术爱好者感谢
C之STL标准模板库介绍 3、RAII机制
RAII是Resource Acquisition Is Initializationwiki上面翻译成 “资源获取就是初始化”的简称是C语言的一种管理资源、避免泄漏的惯用法。
解决一般的问题有些操作比如分配释放内存加锁解锁等需要成对出现否则就会出现问题内存泄漏死锁等。 那么要保证操作的成对需要在规则上实现而不是靠用户去操作。
使用资源的一般过程 1、获取到资源 2、使用资源 3、释放资源
利用局部变量的自动申请和销毁的特性结合累的构造和析构方法实现成对操作的简便化处理。
具体操作如下
#include iostream
using namespace std;class Body {public:Body(){cout 申请资源分配/加锁 endl;}~Body(){cout 释放资源释放/解锁 endl;}void useBody() {cout 使用资源 endl;}
};int main()
{// 复杂易错的资源管理过程就能做成像使用局部变量那样简单Body body;body.useBody();return 0;
}QT里面的 QMutexLocker 加锁貌似就是这种思想的体现。
详解C11 RAII机制