---- 整理自狄泰软件唐佐林老师课程
1. 写法一
下面的程序想要表达什么意思?
1.1 历史原因
早期的C++直接复用class关键字来定义模板
但是泛型编程针对的不只是类类型
class关键字的复用使得代码出现二义性
1.2 typename诞生的直接诱因
自定义类类型内部的嵌套类型
不同类中的同一个标识符可能导致二义性
编译器无法辨识标识符究竟是什么
1.3 编程实验:模板中的二义性
- typename的作用:
- 在模板定义中 声明泛指类型
- 明确告诉编译器其后的标识符为 类型
2. 写法二
下面的程序想要表达什么意思?
- try catch用于分隔正常功能代码与异常处理代码
- try catch可以直接将函数实现分隔为2部分
- 函数声明和定义时可以直接 指定可能抛出的异常类型
- 异常声明成为函数的一部分可以提高代码可读性
2.1 函数异常声明 的注意事项
- 函数异常声明是一种与编译器之间的契约
- 函数声明异常后就只能抛出声明的异常
- 抛出其它异常将导致程序运行终止
- 可以直接通过异常声明定义无异常函数
2.2 编程实验:新的异常写法
#include <iostream>
#include <string>
using namespace std;
int func(int i, int j) throw(int, char)
{
if( (0 < j) && (j < 10) )
{
return (i + j);
}
else
{
throw '0';
}
}
void test(int i) try
{
cout << "func(i, i) = " << func(i, i) << endl;
}
catch(int i)
{
cout << "Exception: " << i << endl;
}
catch(...)
{
cout << "Exception..." << endl;
}
int main(int argc, char *argv[])
{
test(5);
test(10);
return 0;
}
3. 小结
- class可以用来在模板种定义泛指类型(不推荐)
- typename是可以消除模板中的二义性的
- try catch可以将函数体分成两部分
- 函数异常声明能够提高程序的可读性