条款四十六:需要类型转换时请为模板定义非成员函数
条款四十七:请使用traits classes 表现类型信息
1.整合重载技术后,traits classes 有可能在编译期对类型执行if...else测试。
条款四十八:认识template元编程
1.Template metaprogramming(TMP,模板元编程)是编写template-based C++程序并执行于编译期的过程。
2.TMP有两个伟大的效力:第一,它让某些事情更容易。第二,由于Template metaprograms执行于C++编译期,因此可将工作从运行期转移到编译期。
3.TMP已被证明是个“图灵完全”机器。意思好似他的威力大到足以计算任何事物。使用TMP你可以声明变量、执行循环、编写及调用函数。。。但这般构件相对于“正常的”c++对应物看起来很是不同。
4.TMP的起手程序是在编译期计算阶乘。示范如何通过“递归模板具现化”实现循环,以及如何在TMP中创建和使用变量:
template<unsigned n> struct Factorial { enum {value=n*Factorial<n-1>::value}; }; template<> struct Factorial { enum{value=1}; }; int main() { std::cout<<Factorial<5>::value;//印出120 std::cout<<Factorial<10>::value;//印出3628800 }
5.使用TMP的优势:
1)确保度量单位正确。
2)优化矩阵运算。
3)可以生成客户定制之设计模式。
6.Template mataprogramming可将工作由运行期移往编译期,因而得以实现早期错误侦测的执行效率。
条款四十九:了解new-handler的行为
1.设计良好的new-handle函数必须做以下事情:
1)让更多内存可被使用。
2)安装另一个new-handle。
3)卸除new-handle。
4)抛出bad-alloc(或派生自bad_alloc)的异常。
5)不返回,通常调用abort或exit。
2.set_new_handle允许客户指定一个函数,在内存分配无法获得满足时被调用。
条款五十:了解new和delete的合理替换时机
1.主要了解何时可在“全局性的”或“class专属的”基础上合理替换缺省的new和delete。
1)为了检测运行错误。
2)为了收集动态分配内存之使用统计信息。
3)为了增加分配和归还的速度。
4)为了降低缺省内存管理器带来的空间额外开销。
5)为了弥补缺省分配器中的非最佳齐位。
6)为了将相关对象成簇集中。
7)为了获得非传统的行为。
2.有许多理由需要写个自定义的new和delete,包括改善效能、对heap运用错误进行调试、收集heap使用信息。