摘要:
new 申请内存失败时会抛出 异常,此前会调用一个由 std::set_new_handler() 指定的错误处理函数。 set_new_handler() “new handler” 函数通过 std::set_new_handler() 来设置,std::set_new_handler() 定义 阅读全文
摘要:
模板元编程(Template Metaprogramming,TMP)就是利用模板来编写那些在编译时运行的C++程序。 模板元程序(Template Metaprogram)是由C++写成的,运行在编译器中的程序。当程序运行结束后,它的输出仍然会正常地编译。 C++并不是为模板元编程设计的,但自90 阅读全文
摘要:
STL迭代器回顾 最简单的迭代器是输入迭代器(input iterator)和输出迭代器(output iterator), 它们只能向前移动,可以读取/写入它的当前位置,但只能读写一次。比如 ostream_iterator 就是一个输出迭代器。 比它们稍强的是前向迭代器(forward iter 阅读全文
摘要:
如果所有参数都需要隐式类型转换,该函数应当声明为非成员函数。在类模板中,需要所有参数隐式转换的函数应当声明为友元并定义在类模板中。 模板化的 Rational 模板参数推导出错 看起来很完美但它是有问题的。比如我们有如下的调用: 为什么第二条会出错呢?因为编译器无法推导出合适的模板参数来实例化 。 阅读全文
摘要:
提到智能指针可用来自动释放堆中的内存,STL中的迭代器也是一种智能指针,它甚至支持链表元素指针的 操作。 这些高级特性是普通指针所没有的。本文以智能指针为例,介绍成员函数模板的使用。 隐式类型转换 智能指针虽然比普通指针提供了更多有用的特性,但也存在一些问题,比如我们有一个类的层级: 普通指针可以做 阅读全文
摘要:
模板是个好东西,你可以在实现类型安全的同时少写很多代码。但模板提供的是编译期的多态, 即使你的代码看起来非常简洁短小,生成的二进制文件也可能包含大量的冗余代码。 因为模板每次实例化都会生成一个完整的副本,所以其中与模板参数无关的部分会造成代码膨胀。 把模板中参数无关的代码重构到模板外便可以有效地控制 阅读全文