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

  条款四十七:请使用traits classes 表现类型信息

    1.整合重载技术后,traits classes 有可能在编译期对类型执行if...else测试。

    2.STL共有五种迭代器分类

             1)Input迭代器只能向前移动一次一步,客户只可读取(不能涂写)它们所指的东西,而且只能读取一次。(模仿指向输入文件的阅读指针)

             2)Output迭代器一切只为输出,它们只向前移动,一次一步,客户只可涂写它们所指的东西,而且只能涂写一次。

               3)forward迭代器,可以做Input和Output所能做的每一件事,而且可以读或写其所指物一次以上。

             4)Bidirectional迭代器比forward更强大,除了可以向前移动还可以向后移动。set.multiset,map,multimap的迭代器都属于这种。

             5)random access迭代器,可以执行迭代器算术。也就是可以在常量的时间内向前或向后跳跃任意距离。(类似于指针算术)vector,deque和string提供的迭代器都是这一分类。

    3.迭代器类型的继承关系图如下:

  条款四十八:认识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->::value};
}; template<>
struct Factorial
{
enum{value=};
}; int main()
{
std::cout<<Factorial<>::value;//印出120
std::cout<<Factorial<>::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使用信息。

Effective C++ 读书笔记(46-50)的更多相关文章

  1. Effective STL 读书笔记

    Effective STL 读书笔记 标签(空格分隔): 未分类 慎重选择容器类型 标准STL序列容器: vector.string.deque和list(双向列表). 标准STL管理容器: set. ...

  2. Effective STL读书笔记

    Effective STL 读书笔记 本篇文字用于总结在阅读<Effective STL>时的笔记心得,只记录书上描写的,但自己尚未熟练掌握的知识点,不记录通用.常识类的知识点. STL按 ...

  3. effective c++读书笔记(一)

    很早之前就听过这本书,找工作之前读一读.看了几页,个人感觉实在是生涩难懂,非常不符合中国人的思维方式.之前也有博主做过笔记,我来补充一些自己的理解. 我看有人记了笔记,还不错:http://www.3 ...

  4. Effective Java读书笔记完结啦

    Effective Java是一本经典的书, 很实用的Java进阶读物, 提供了各个方面的best practices. 最近终于做完了Effective Java的读书笔记, 发布出来与大家共享. ...

  5. Effective C++读书笔记(转)

    第一部分 让自己习惯C++ 条款01:视C++为一个语言联邦 一.要点 ■ c++高效编程守则视状况而变化,取决于你使用c++的哪一部分. 二.扩展 将c++视为一个由相关语言组成的联邦而非单一语言会 ...

  6. Effective java读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己 计在16年要看12本书,主要涉及java基础.Spring研究.java并发.J ...

  7. Effective Objective-C 读书笔记

    一本不错的书,给出了52条建议来优化程序的性能,对初学者有不错的指导作用,但是对高级阶段的程序员可能帮助不是很大.这里贴出部分笔记: 第2条: 使用#improt导入头文件会把头文件的内容全部暴露到目 ...

  8. [Effective Java读书笔记] 第二章 创建和销毁对象(1~7)

    我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537576.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...

  9. 【Effective C++读书笔记】序

    C++ 是一个难学易用的语言! [C++为什么难学?] C++的难学,不仅在其广博的语法,以及语法背后的语义,以及语义背后的深层思维,以及深层思维背后的对象模型: C++的难学还在于它提供了四种不同而 ...

  10. Effective Java 读书笔记(一):使用静态工厂方法代替构造器

    这是Effective Java第2章提出的第一条建议: 考虑用静态工厂方法代替构造器 此处的静态工厂方法并不是设计模式,主要指static修饰的静态方法,关于static的说明可以参考之前的博文&l ...

随机推荐

  1. Scipy教程 - 距离计算库scipy.spatial.distance

    http://blog.csdn.net/pipisorry/article/details/48814183 在scipy.spatial中最重要的模块应该就是距离计算模块distance了. fr ...

  2. 【一天一道LeetCode】索引目录 ---C++实现

    [一天一道LeetCode]汇总目录 这篇博客主要收藏了博主所做题目的索引目录,帮助各位读者更加快捷的跳转到对应题目 目录按照难易程度:easy,medium,hard来划分,读者可以按照难易程度进行 ...

  3. Linux0.11 中对地址的管理

    个字节,段信息无法直接存放在段寄存器中(段寄存器只有2字节).Intel的设计是段描述符集中存放在GDT或LDT中,而段寄存器存放的是段描述符在GDT或LDT内的索引值(index). Linux中逻 ...

  4. libevent之event

    就如libevent官网上所写的“libevent - an event notification library”,libevent就是一个基于事件通知机制的库,可以看出event是整个库的核心.e ...

  5. UE4 创建第三人称角色

    一.C++创建 1.      创建一个C++类,继承自Character,取名MyThirdCharacter 2.      在头文件中声明一个摄像机目标点CameraBoom,一个摄像机Foll ...

  6. HADOOP中的CRC数据校验文件

    Hadoop系统为了保证数据的一致性,会对文件生成相应的校验文件(.crc文件),并在读写的时候进行校验,确保数据的准确性.在本地find -name *.crc -print 看 比如我们遇到的这个 ...

  7. Sample Code for Qp_preq_pub.Price_request Api to Simulate an Ask for Promotion Modifier

    DECLARE p_line_tbl QP_PREQ_GRP.LINE_TBL_TYPE; p_qual_tbl QP_PREQ_GRP.QUAL_TBL_TYPE; p_line_attr_tbl ...

  8. 网站开发进阶(十二)JS实现打印功能(包括打印预览、打印设置等)

    JS实现打印功能(包括打印预览.打印设置等) 绪 最近在进行项目开发时,需要实现后台管理端打印功能,遂在网上一阵搜索,搜到了很多相关的文章.其中绝大部分文章都是使用的Lodop5.0(Web打印和套打 ...

  9. 自动生成材质Material(Unity3D开发之十九)

    猴子原创,欢迎转载.转载请注明: 转载自Cocos2Der-CSDN,谢谢! 原文地址: http://blog.csdn.net/cocos2der/article/details/46854411 ...

  10. Erlang cowboy 架构

    Erlang cowboy Architecture架构 Erlang cowboy参考: http://ninenines.eu/docs/en/cowboy/1.0/guide/ 本章Archit ...