第六十八课 C++中的一些奇怪的写法
一、template
-
template <class T>
这样的定义和template <typename T>
效果是差不多的 -
原因是:
早期的C++直接复用class关键字来定义模板,但是泛型编程不只是类类型,如果使用 class 关键字的复用使得代码出现二义性
-
typename 诞生的原因
自定义类类型内部的嵌套类型,不同类中的同一个标识符可能导致二义性,编译器无法辨识标识符究竟是什么
二、try
int func(int i)
try // 正常语句
{
return i;
}
catch(...) // 异常语句
{
return -1
}
int func(int i, int j)
throw(int) // 说明可能抛出异常,异常类型为int
{
return i + j;
}
try ...catch
用于分隔正常代码与异常处理代码try ...catch
可以直接将函数实现分割为2部分- 函数声明和定义时可以直接指定可能抛出的异常类型
- 异常声明成为函数的一部分可以提高代码的可读性
函数异常声明注意事项
-
函数异常声明是一种与编译器之间的契约
-
函数声明异常后就只能抛出声明的异常
抛出的其他异常将会导致程序运行终止
可以直接通过异常声明定义无异常函数
三、小结
- class 可以用来在模板中定义泛指类型(不推荐)
- typename 是可以消除模板中的二义性
try...catch
可以将函数分割为两部分- 异常声明能够提高程序的可读性