自学书籍
文章平均质量分 67
xiao囡囡
偶是一枚菜鸟女码农
展开
-
《STL源码剖析》学习--traits
在本书迭代器一节提到了Traits编程技法,将其誉为stl源码门匙,在《C++编程思想》一书中,将其列为模板编程中的习语“特征”,这里进行总结。 traits技术 也往往和迭代器一起使用。 1、理解概念 在《C++编程思想》一书中,特征模板技术,定义为一种将与某种类型相关联的所有声明绑定在一起的方法,可以以一种灵活的方法从语境中将类型和值进行“混合和匹配”,同时又使得代码灵活易读且易于维护。原创 2014-01-21 15:42:02 · 1093 阅读 · 0 评论 -
Effective C++ --7 模板与泛型编程
上一篇Effective C++ -- 6 继承与面向对象设计 41、了解隐式接口和编译器多态 (1)class和template都支持接口和多态。Class支持显示接口,多态是指virtual引起的运行期多态;而template支持隐式接口和编译器多态。 (2)编译器多态是指以不同的template参数具现化function templates会导致调用不同的函数。隐式接口是指t原创 2014-02-01 21:45:20 · 1159 阅读 · 0 评论 -
《深度探索C++对象模型》--7 站在对象模型的尖端
C++语言的扩充性质 1、template (1)memberfunctions只有在被使用时,才会被实例化。 (2)注意使用template时,注意针对特定参数时可能有些操作没有定义。 template在被实例化之前只能实施有限的错误检查,有些很简单的错误编译器照样通过。 (3)template之中对于一个nonmembername的决议结果,都是由“s原创 2014-02-22 10:58:00 · 914 阅读 · 0 评论 -
《深度探索C++对象模型》--1 关于对象
1、封装成本 与C比较,在virtual没有参与的情况下,C++的封装没有增加成本。C++在布局以及存取时间上的主要而外负担是由virtual引起的。包括:virtual function机制和virtual base class。 2、C++对象模式 在C++中,有两种class data members:static和nonstatic,以及三种class mem原创 2014-02-13 16:37:05 · 1063 阅读 · 0 评论 -
Effective C++ -- 零散知识点整理
Effective C++ --1 让自己习惯C++ Effective C++ --2 构造/析构/赋值运算 Effective C++ --3 资源管理 Effective C++ --4 设计与声明 Effective C++ --5 实现 Effective C++ -- 6 继承与面向对象设计 EffectiveC++ --7 模板与泛型编程 Effectiv原创 2014-02-02 22:25:35 · 1318 阅读 · 0 评论 -
Effective C++ --1 让自己习惯C++
1、 视C++为一个语言联邦 C++主要的次语言有四种:C、Object-Oriented C++、Template C++和STL。 2、 尽量以const,enum,inline替换#define (1) #define单纯常量,编译前需要预处理器,没有进入编译的符号表,出错信息不容易定位。 (2) #define 不能用于定义常量指针,对const取地址合法,对#define取地原创 2014-01-27 10:46:08 · 1017 阅读 · 0 评论 -
《深度探索C++对象模型》--2 构造函数语意学
上一篇: 《深度探索C++对象模型》--1 关于对象 1、default constructor的构造操作 C++standard:对于class X ,如果没有任何user-declared constructor,那么会有一个default constructor 被暗中(implicitly)声明出来,一个被暗中声明出来的default constru原创 2014-02-17 20:40:26 · 913 阅读 · 0 评论 -
《深度探索C++对象模型》--3 Data语意学
1、Data Member的绑定 (1)“memberrewriting rule”,一个inline函数实体,在整个class声明未被完全看见之前,是不会被评估求值的。所以通常将inline定义放于类声明之外。 (2)但是对于argumentlist中的名称还是会在第一次遭遇时适当地决议。在extern和nestedtype name之间 非直觉绑定操作还是原创 2014-02-19 11:24:09 · 970 阅读 · 0 评论 -
《深度探索C++对象模型》--4 Function语意学
1、member的各种调用方式 (1)nonstaticmember functions C++的设计准则之一就是:非静态成员函数至少必须和一般的非成员函数有相同的效率,编译器内部将成员函数转换为对等的非成员函数实体。通过安插this指针和mangling等完成。 (2)namemangling(名字的特殊处理) 使名字独一无二,函数的signature为函原创 2014-02-19 11:25:03 · 1079 阅读 · 0 评论 -
《深度探索C++对象模型》--5 构造析构拷贝 && 6 执行期语意学
《深度探索C++对象模型》--5 构造、析构、拷贝语意学 1、纯虚函数: (1)C++可以定义和调用一个纯虚函数,不过只可以静态调用,不可以由虚拟机制调用。 注意:pure virtual destructor一定得定义,因为每一个derivedclass destructor会被编译器加以扩张,以静态方式调用其每一个virtual base class及上一个ba原创 2014-02-19 15:17:05 · 1037 阅读 · 0 评论 -
Effective C++ --8 定制new和delete && 9杂谈讨论
上一篇Effective C++ --7 模板与泛型编程 Effective C++ --8 定制new和delete 49、了解new-handler的行为 (1)set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被满足。Operate new 确保在分配class对象内存的过程中以class专属之new_handler替换global new-h原创 2014-02-02 20:44:09 · 1019 阅读 · 0 评论 -
Effective C++ --6 继承与面向对象设计
上一篇Effective C++ --5 实现 32、确定你的public继承塑模出is-a关系 (1)public 继承意味着is-a。适用于base class身上的每一件事一定也适用于derived class身上,因为每一个derived class对象也就是一个base class 对象。 33、避免遮掩继承而来的名称 (1)derived class内的名称会掩原创 2014-02-01 17:50:46 · 1119 阅读 · 0 评论 -
《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法2
上一篇请见可能令你困惑的C++语法1 现在继续, 2.临时对象的产生和运用 临时对象,是一种无名对象。制造临时对象的方法是,在型别之后加一对小括号,并可以给定初值,这样就会调用响应的constructor。在stl中,往往与仿函数一起使用,这样为了使程序看起来干净。 template class print{ public: void operator(){const T& elem)原创 2014-01-21 09:34:16 · 1343 阅读 · 0 评论 -
《STL源码剖析》学习--STL体现的思想
STL总是尽量做到节省内存且效率最高,在看本书中也越来越有深的体会。这里搜集一个stl中提高效率的方法。 1.对象的析构 如果将一个区间中的所有的对象析构掉,这是如果范围很大,每个析构都是无关痛痒的,对效率有很大伤害。 负责对象析构的destroy()有两个版本,第一个版本直接调用对象的析构函数;第二个版本,如果对象的析构是无关痛痒的(其__type_traits是true),则什么也不做,原创 2014-01-22 09:20:13 · 1039 阅读 · 0 评论 -
《STL源码剖析》学习--6章--power算法分析
最近在看侯捷的《STL源码剖析》,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下。 6章--power算法分析 书本中的算法如下所示: template _Tp __power(_Tp __x, _Integer __n, _MonoidOperation __opr) { if (__n == 0) return identity_element(__opr原创 2014-01-15 14:17:42 · 1113 阅读 · 0 评论 -
《STL源码剖析》--知识点
本书主要讲的是SGI STL。 1、traits原创 2014-01-22 00:08:12 · 766 阅读 · 0 评论 -
《STL源码剖析》学习--6章--_rotate算法分析
最近在看侯捷的《STL源码剖析》,其中有许多不太明白之处,后经分析或查找资料有了些理解,现记录一下。 《STL源码剖析》学习--6章--random access iterator _rotate算法分析 针对forward iterator 和 bidirectional iterator的_rotate 比较好理解,但是对random access iterator _rota原创 2014-01-17 12:46:24 · 1438 阅读 · 1 评论 -
Effective C++ --2 构造/析构/赋值运算
上一部分Effective C++ --1 让自己习惯C++ 5、 了解C++默认编写并调用哪些函数 (1) 编译器暗自为类创建默认构造函数、拷贝构造函数、拷贝赋值函数和析构函数。 (2) 拷贝构造函数中对于内置类型通过拷贝bits来进行初始化,非内置类型通过调用成员变量的拷贝构造函数来进行初始化。 (3) 对于内含指针成员的类编译器不会生出赋值操作,必须自己定义拷贝赋原创 2014-01-27 11:39:46 · 919 阅读 · 0 评论 -
Effective C++ --3 资源管理
上一部分 Effective C++ --2 构造/析构/赋值运算 13、以对象管理资源 (1)为了防止new后提前return等没有执行delete造成内存泄露,利用RAII(resource acquisition is initialization,资源取得时便是初始化时机)对象。 (2)两个常被使用的RAII对象auto_ptr和tr1::shared_ptr原创 2014-01-27 14:24:34 · 916 阅读 · 0 评论 -
Effective C++ --4 设计与声明
上一部分Effective C++ --3 资源管理 18、让接口容易被正确使用,不易被误用 (1)设计接口时要考虑客户可能可能做出的错误输入,如参数的形式等。 19、设计class犹如设计type (1)对象如何被创建和销毁;对象的初始化和赋值的差别;如果被pass by value使用意味着什么;合法值;继承图系;转换;操作符和函数的类型;什么标准函数设置为私有;什么原创 2014-01-28 17:16:38 · 938 阅读 · 0 评论 -
Effective C++ --5 实现
上一部分 Effective C++ --4 设计与声明 26、尽可能延后变量定义式的出现时间 (1)这样可以增加程序的清晰度并改善程序效率。如定义变量后还未使用遇到return或者抛出异常,这样未使用却增加了调用构造析构函数的成本。 27、尽量少做转型动作 (1)使用c++新式转型,而不要是用旧式转性。有四种新式转型:const_cast()、dynamic_cast()、r原创 2014-01-30 17:15:13 · 827 阅读 · 0 评论 -
《STL源码剖析》学习--六大组件
stl 提供了六大组件,分别为:容器、算法、迭代器、仿函数、适配器和配置器。 容器通过配置器取得数据存储空间,算法通过迭代器存取容器的内容,仿函数可以协助算法完成不同的策略,配接器可以修饰或者嵌套仿函数。 下面分别简单介绍: 1.容器(container) -- 各种数据结构 根据数据排列方式分为序列式和关联式: 1.1序列式容器 (1)vector:与C++提供的静态空间Array原创 2014-01-22 00:04:51 · 951 阅读 · 0 评论