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

时间:2021-12-12 09:55:29

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

  条款四十七:请使用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.迭代器类型的继承关系图如下:

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

  条款四十八:认识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&plus;&plus;读书笔记(一)

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

  4. Effective Java读书笔记完结啦

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

  5. Effective C&plus;&plus;读书笔记(转)

    第一部分 让自己习惯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. &lbrack;Effective Java读书笔记&rsqb; 第二章 创建和销毁对象&lpar;1~7&rpar;

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

  9. 【Effective C&plus;&plus;读书笔记】序

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

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

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

随机推荐

  1. Python强化训练笔记&lpar;一&rpar;——在列表,字典,集合中筛选数据

    列表,字典,集合中根据条件筛选数据,如下所示 列表:[-10,2,2,3,-2,7,6,9] 找出所有的非负数 字典:{1:90,2:55,3:87...} 找出所有值大于60的键值对 集合:{2,3 ...

  2. iframe 子页面获取父页面的元素并且控制样式

    父页面的代码 <div id="div5" style="position:relative;height:500px;">             ...

  3. 使用jQuery UI方法

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. 解锁Oracle数据库用户

    Oracle数据库,如何解除数据库用户账户的锁定呢???如何修改口令呢??? 请问各位高手:Oracle数据库,如何解除数据库用户账户的锁定呢???如何修改口令呢???[万分感激各位高手的帮忙] 00 ...

  5. python基础(6):列表和字典类型

    前面我们所接触的数据类型都是存单个值,今天我们来看看可以存多个值的列表和字典. 预习: 1.有列表data=['alex',49,[1900,3,18]],分别取出列表中的名字,年龄,出生的年,月,日 ...

  6. 在SQL Server 2008 Management Studio中修改表字段顺序

    有时我们可能需要为一个已存在的数据库表添加字段,并且想让这个字段默认排的靠前一些,这时就需要为表字段重新进行排序,默认情况下在Management Studio中调整顺序并保存时会提示"不允 ...

  7. Java 设计模式专栏

    Java 设计模式之工厂模式学习心得 转:Java 设计模式之单例模式 转:  Java设计模式之建造者模式 转:Java设计模式之代理模式

  8. vscode ----&gt&semi; 学习笔记

    java开发环境 jdk配置 maven配置 file --> preferences --> settings 在search settings搜索关键词 java.home , mav ...

  9. JAVA NIO:Buffer&period;mark&lpar;&rpar;的用法

    在默认情况下,Buffer.mark()并没有什么用处,既不会影响Buffer的遍历,也不会影响Buffer的位置统计函数,如remaining()函数,能影响这些操作的行为只有position(). ...

  10. C&num;下载歌词文件

    前段时间写了一篇c#解析Lrc歌词文件,对lrc文件进行解析,支持多个时间段合并.本文借下载歌词文件来探讨一下同步和异步方法. Lrc文件在网络上随处可见,我们可以通过一些方法获取,最简单的就是别人的 ...