Effective C++
阅读Effective C++后的一些总结
Quellaaa
这个作者很懒,什么都没留下…
展开
-
Effective C++ 1-3
1.视C++为一个语言联邦c++并不是一个语言,它是由4个次语言组成,分别是C、Object-Oriented C++、Template C++和STL。(其实这4部分不仅可以体现c++的主要特性,也可以从4个方面学习c++,并可以从这4个方面验证自己对c++了解和掌握程度)。因此它的高效编程守则对于同一个对象也会有多种要求。所以c++高效编程守则要视状况而变化,因为这取决于你当前状况偏向于哪个...原创 2019-09-06 15:54:14 · 150 阅读 · 2 评论 -
EC1-3
1.视C++为一个语言联邦c++并不是一个语言,它是由4个次语言组成,分别是C、Object-Oriented C++、Template C++和STL。(其实这4部分不仅可以体现c++的主要特性,也可以从4个方面学习c++,并可以从这4个方面验证自己对c++了解和掌握程度)。因此它的高效编程守则对于同一个对象也会有多种要求。所以c++高效编程守则要视状况而变化,因为这取决于你当前状况偏向于哪个...原创 2019-09-11 10:21:02 · 135 阅读 · 0 评论 -
EC4-10
4. 确定对象被使用前已先被初始化1)关于初始化因为使用C part of C++初始化会招致运行期成本,所以内置类型这些(如int、array等)就不会被初始化;而non-c parts of c++初始化没有成本?所以stl这些容器(如vector)就是会被初始化。2)默认构造函数的赋值和初始化在默认构造函数中,有等号就称为赋值,否则为初始化。赋值会先调用参数所属类型对应的默认构造函数...原创 2019-09-11 10:21:50 · 124 阅读 · 0 评论 -
EC11-17
11. 在operator= 中处理自我赋值看下面代码感受自我赋值的危险class Bitmap{...}class Widget{ ... private: Bitmap *pb;}Widget& Widget::operator=(const Widget&rhs){ delete pb; pb = new Bitmap(*...原创 2019-09-11 10:22:33 · 186 阅读 · 0 评论 -
EC18
18. 让接口容易被正确使用,不易被误用1)接口(包括function接口、class接口、template接口等)是客户与自己写的代码互动的手段。理想接口的标准:应该是客户用该接口没有获得预期行为,那么该代码不该通过编译。2)设计一个理想接口首先必须考虑客户可能做出什么样的错误;其次限制类型内什么事可做,什么事不可做。(比如加const限制和使types行为和内置types一致);然后不要要...原创 2019-09-11 10:23:16 · 136 阅读 · 0 评论 -
EC19-23
19. 设计class犹如设计type设计class主要涉及重载函数和操作符、控制内存的分配和归还、定义对象的初始化和终结。要想设计一个高效的类,应该考虑以下问题:真的需要一个新type吗?——如果只是继承基类就可以为已有的类添加机能,那么单纯定义一个非成员函数或templates就可以达到目标。新type的对象应该如何被创建和销毁——涉及类的构造函数和析构函数以及内存分配函数和释放函数...原创 2019-09-11 10:24:05 · 160 阅读 · 0 评论 -
EC24
24.若所有参数皆需类型转换,请为此采用non-member函数正常情况下令classes支持隐式类型转换是糟糕的,但在建立数值类型时,一般要求classes支持隐式类型转换。class Rational{public: Rational(int numerator = 0, int denominator = 1); int numerator() const; int denom...原创 2019-09-16 16:01:25 · 192 阅读 · 0 评论 -
EC27
27. 尽量少做转型动作c++提供四种新式转型:1)const_cast<T>(expression)——唯一可以移除对象常量性的c+±style转型操作符。2)dynamic_cast<T>(expression)——决定某对象是否归属继承体系中的某个类型,“安全向下转型”。(就是将基类转型为继承类),实现版本执行速度相当慢,效率低。3)reinterpret...原创 2019-09-16 23:12:51 · 121 阅读 · 0 评论 -
EC32
32. 确定你的public继承塑模出is-a关系classes之间关系有is-a、has-a和is-implemented-in-terms-of,其中“public继承”意味is-a,即适用于基类身上的每一件事情一定也适用于继承类,因为每个继承类对象都是一个基类对象。【想象成一个集合,继承类包含了基类,基类是继承类的子集】33. 避免遮掩继承而来的名词内层作用域的名称会遮蔽外围作用...原创 2019-09-17 23:30:45 · 304 阅读 · 0 评论 -
EC35
35. 考虑virtual函数以外的其他选择令客户通过public non-virtual成员函数间接调用private virtual函数。继承类可以重新定义继承而来的private virtual函数该条款主要介绍替代virtual函数的方法,主要有:1)用private virtual函数替代:即原本用virtual函数地方改成用非virtual函数,并在这里面调用private ...原创 2019-09-19 15:30:30 · 217 阅读 · 0 评论 -
EC40
40. 明智而审慎地使用多重继承多重继承可能带来的风险:继承类从一个以上的基类继承相同名称(如函数和typedef等),可能会导致较多的歧义。当一个函数用virtual修饰了,那就说明要在继承类对其重新定义,不然就没必要用virtual修饰啦C++解析重载函数调用的规则时:在一个继承多个基类的继承类中,如果继承类调用的A函数同时存在多个基类中,C++首先会确认继承类调用的A函数的...原创 2019-09-20 10:25:05 · 289 阅读 · 0 评论 -
EC43
43. 学习处理模板化基类内的名称如果编译期间有足够信息确定类型,可以采用基于template解法。eg:如果要传送消息给多个不同的公司,如果编译期间有足够的信息决定哪个信息传至哪个公司,就可以采用基于template解法。模板全特化:看个例子:template<> //该语法象征这既不是template,也不是标准class,而是特化版的MsgSender temp...原创 2019-09-26 21:09:44 · 161 阅读 · 0 评论 -
【后记】
Effective C++这本书今天就算看过一遍啦~每个条款的总结都在前面文章罗列了,因为每个条款里面很多知识点对于我来说都是比较新鲜的,所以就以一种记笔记形式记录下来,可能个人总结占比比较少,但是一步步来吧~目前计划先把这些条款重点都怼过一遍,脑子对其有点印象,然后后期再看看自己写的笔记或遇到相关问题后,到时有了自己更深的体验感悟再补充吧~...原创 2019-09-26 21:17:27 · 103 阅读 · 0 评论