Effective C++ 读书笔记(46-50)

  条款四十六:需要类型转换时请为模板定义非成员函数

 

  条款四十七:请使用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中创建和使用变量:

Effective C++ 读书笔记(46-50)
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
}
Effective C++ 读书笔记(46-50)

    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使用信息。

Effective C++ 读书笔记(46-50),布布扣,bubuko.com

Effective C++ 读书笔记(46-50)

上一篇:C语言链表实现冒泡法排序


下一篇:ubuntu 怎么更新?ubuntu更新命令及方法