http://www.runoob.com/cplusplus/cpp-templates.html
模板是泛型编程的基础,泛型编程即以一种独立于任何特定类型的方式编写代码。模板是创建泛型类或函数的蓝图或公式。
模板函数
形式如下:
template <class type>
ret-type func-name(parameter list)
{
// 函数的主体
}
在这里,type 是函数所使用的数据类型的占位符名称。这个名称可以在函数定义中使用。
类模板
形式如下
template <class type>
class class-name {
.
.
.
}
在这里,type 是占位符类型名称,可以在类被实例化的时候进行指定。您可以使用一个逗号分隔的列表来定义多个泛型数据类型。
C++预处理
http://www.runoob.com/cplusplus/cpp-preprocessor.html
预处理是一些指令,指示编译器在实际编译前所需完成的预处理
#define预处理
用于创建符号常量。该符号常量通称为宏,指令一般形式:
#define macro-name replacement-text
参数宏
#define MIN(a,b) (a
#ifndef NULL
#define NULL 0
#endif
#ifdef DEBUG
cerr <<"Variable x = " << x << endl;
#endif
#if 0
不进行编译的代码
#endif
# 和 ## 运算符
# 运算符会把 replacement-text 令牌转换为用引号引起来的字符串。
#include <iostream>
using namespace std;
#define MKSTR( x ) #x
int main ()
{
cout << MKSTR(HELLO C++) << endl;
return 0;
}
## 运算符用于连接两个令牌
#include <iostream>
using namespace std;
#define concat(a, b) a ## b
int main()
{
int xy = 100;
cout << concat(x, y);
return 0;
}
C++中预定义宏
LINE:当前行
FILE:当前文件名
DATE:当前日期
TIME:当前时间
C++信号处理
信号是由操作系统传给进程的中断,会提早终止一个程序。
有些信号不能被程序捕获,但是下表所列信号可以在程序中捕获,并可以基于信号采取适当的动作。这些信号是定义在 C++ 头文件 中。
SIGABRT:程序异常终止
SIGFPE:错误的算数预算
SIGILL:检测非法指令
SIGINT:接收到交互注意信号
SIGSEGV:非法访问内存
SIGTERM:发送到程序的终止请求
signal()函数
C++信号处理库提供了signal函数,用来捕获突发事件,语法如下:void (*signal (int sig, void (*func)(int)))(int);
这个函数接收两个参数:第一个参数是一个整数,代表了信号的编号;第二个参数是一个指向信号处理函数的指针。
raise()函数
生成信号,带有一个整数信号编号作为参数:int raise (signal sig);
在这里,sig 是要发送的信号的编号,这些信号包括:SIGINT、SIGABRT、SIGFPE、SIGILL、SIGSEGV、SIGTERM、SIGHUP。