自学书籍
文章平均质量分 67
xiao囡囡
偶是一枚菜鸟女码农
展开
-
《STL源码剖析》学习--traits
在本书迭代器一节提到了Traits编程技法,将其誉为stl源码门匙,在《C++编程思想》一书中,将其列为模板编程中的习语“特征”,这里进行总结。traits技术 也往往和迭代器一起使用。1、理解概念在《C++编程思想》一书中,特征模板技术,定义为一种将与某种类型相关联的所有声明绑定在一起的方法,可以以一种灵活的方法从语境中将类型和值进行“混合和匹配”,同时又使得代码灵活易读且易于维护。原创 2014-01-21 15:42:02 · 1091 阅读 · 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 · 1157 阅读 · 0 评论 -
《深度探索C++对象模型》--7 站在对象模型的尖端
C++语言的扩充性质1、template(1)memberfunctions只有在被使用时,才会被实例化。(2)注意使用template时,注意针对特定参数时可能有些操作没有定义。template在被实例化之前只能实施有限的错误检查,有些很简单的错误编译器照样通过。(3)template之中对于一个nonmembername的决议结果,都是由“s原创 2014-02-22 10:58:00 · 911 阅读 · 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 · 1061 阅读 · 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 · 1301 阅读 · 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 · 1003 阅读 · 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 · 911 阅读 · 0 评论 -
《深度探索C++对象模型》--3 Data语意学
1、Data Member的绑定(1)“memberrewriting rule”,一个inline函数实体,在整个class声明未被完全看见之前,是不会被评估求值的。所以通常将inline定义放于类声明之外。(2)但是对于argumentlist中的名称还是会在第一次遭遇时适当地决议。在extern和nestedtype name之间非直觉绑定操作还是原创 2014-02-19 11:24:09 · 966 阅读 · 0 评论 -
《深度探索C++对象模型》--4 Function语意学
1、member的各种调用方式(1)nonstaticmember functionsC++的设计准则之一就是:非静态成员函数至少必须和一般的非成员函数有相同的效率,编译器内部将成员函数转换为对等的非成员函数实体。通过安插this指针和mangling等完成。(2)namemangling(名字的特殊处理)使名字独一无二,函数的signature为函原创 2014-02-19 11:25:03 · 1076 阅读 · 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和delete49、了解new-handler的行为 (1)set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被满足。Operate new确保在分配class对象内存的过程中以class专属之new_handler替换global new-h原创 2014-02-02 20:44:09 · 1010 阅读 · 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 · 1107 阅读 · 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 · 1036 阅读 · 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 · 1111 阅读 · 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 · 1434 阅读 · 1 评论 -
Effective C++ --2 构造/析构/赋值运算
上一部分Effective C++ --1 让自己习惯C++ 5、了解C++默认编写并调用哪些函数(1) 编译器暗自为类创建默认构造函数、拷贝构造函数、拷贝赋值函数和析构函数。(2) 拷贝构造函数中对于内置类型通过拷贝bits来进行初始化,非内置类型通过调用成员变量的拷贝构造函数来进行初始化。(3) 对于内含指针成员的类编译器不会生出赋值操作,必须自己定义拷贝赋原创 2014-01-27 11:39:46 · 907 阅读 · 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 · 900 阅读 · 0 评论 -
Effective C++ --4 设计与声明
上一部分Effective C++ --3 资源管理 18、让接口容易被正确使用,不易被误用 (1)设计接口时要考虑客户可能可能做出的错误输入,如参数的形式等。19、设计class犹如设计type (1)对象如何被创建和销毁;对象的初始化和赋值的差别;如果被pass by value使用意味着什么;合法值;继承图系;转换;操作符和函数的类型;什么标准函数设置为私有;什么原创 2014-01-28 17:16:38 · 929 阅读 · 0 评论 -
Effective C++ --5 实现
上一部分Effective C++ --4 设计与声明 26、尽可能延后变量定义式的出现时间 (1)这样可以增加程序的清晰度并改善程序效率。如定义变量后还未使用遇到return或者抛出异常,这样未使用却增加了调用构造析构函数的成本。27、尽量少做转型动作 (1)使用c++新式转型,而不要是用旧式转性。有四种新式转型:const_cast()、dynamic_cast()、r原创 2014-01-30 17:15:13 · 816 阅读 · 0 评论 -
《STL源码剖析》学习--六大组件
stl 提供了六大组件,分别为:容器、算法、迭代器、仿函数、适配器和配置器。容器通过配置器取得数据存储空间,算法通过迭代器存取容器的内容,仿函数可以协助算法完成不同的策略,配接器可以修饰或者嵌套仿函数。下面分别简单介绍:1.容器(container) -- 各种数据结构根据数据排列方式分为序列式和关联式:1.1序列式容器(1)vector:与C++提供的静态空间Array原创 2014-01-22 00:04:51 · 948 阅读 · 0 评论