
Effective C++
文章平均质量分 89
mathZHA
这个作者很懒,什么都没留下…
展开
-
Effective C++总结(二)
Effective C++总结第4章 设计与声明条款18: 让接口容易被正确使用,不易被误用 详见这里."促进正确使用"的办法包括接口的一致性,以及与内置类型的行为兼容.条款19: 设计 class 犹如设计type 详见这里.class 的设计就是type的设计.在定义一个新的type之前,请确定已经考虑本条款覆盖的所有讨论主题.条款20: 宁以pass-原创 2015-09-24 14:57:20 · 350 阅读 · 0 评论 -
Effective C++——条款40(第6章)
条款40: 明智而审慎地使用多重继承Use multiple inheritance judiciously 一旦涉及多重继承(multiple inheritance:MI),C++社群便分为两个基本阵营.其中之一认为如果单一继承(single inheritance,SI)是好的,多重继承一定更好.另一派阵营则主张,单一继承是好的,但多重继承不值得拥有(或使用).本条款原创 2015-09-16 09:27:48 · 432 阅读 · 0 评论 -
Effective C++——条款41,条款42(第7章)
第7章 模板与泛型编程Templates and Generic Programming C++ template 的最初发展动机很直接:使人们得以建立"类型安全"(type-safe)的容器如vector,list和map.容器当然好,但泛型编程(generic programming)写出的代码和其所处理的对象类型彼此独立,这点相当好.STL算法如for_each,fi原创 2015-09-16 15:50:26 · 565 阅读 · 0 评论 -
Effective C++——条款36(第6章)
条款36: 绝不重新定义继承而来的non-virtual 函数Never redefine an inherited non-virtual function 假设 class D系由 class B以 public 形式派生出来,class B定义有一个 public 成员函数mf.由于mf的参数和返回值都不重要,所以假设两者皆为 void .class B {publi原创 2015-09-13 20:29:50 · 432 阅读 · 0 评论 -
Effective C++——条款39(第6章)
条款39: 明智而审慎地使用 private 继承Use private inheritance judiciously 条款32曾经论证过C++如何将 public 继承视为is-a关系.现在看看 private 继承代替 public 继承的例子:class Person { ... };class Student : private Person { ... }原创 2015-09-15 17:26:00 · 397 阅读 · 0 评论 -
Effective C++——条款38(第6章)
条款38: 通过复合模塑出has-a或"根据某物实现出"Model "has-a" or "is-implemented-in-terms-of" through composition 复合(composition)是类型之间的一种关系,当某种类型的对象内含它种类型的对象,便是这种关系.例如:class Address { ... };class PhoneNumb原创 2015-09-15 14:47:22 · 2055 阅读 · 0 评论 -
Effective C++——条款37(第6章)
条款37: 绝不重新定义继承而来的缺省参数值Never redefine a function's inherited default parameter value 先将讨论简化,只能继承两种函数:virtual 和non-virtual 函数.然而重新定义一个继承而来的non-virtual 函数永远是错误的(详见条款36),所以可以安全地将本条款的讨论局限于"继承一个带有缺原创 2015-09-15 11:44:17 · 424 阅读 · 0 评论 -
Effective C++——条款35(第6章)
条款35: 考虑 virtual 函数以外的其他选择Consider alternatives to virtual functions 假如在设计一个游戏类的继承体系时,提供一个成员函数healthValue,返回一个整数,表示人物的健康程度.由于不同的人物可能以不同的方式计算健康程度,将healthValue声明为 virtual 似乎是再明白不过的做法:class Ga原创 2015-09-13 17:05:42 · 460 阅读 · 0 评论 -
Effective C++——条款33(第6章)
条款33: 避免遮掩继承而来的名称Avoid hiding inherited names 这个题材和作用域(scopes)有关,在诸如下面的代码:int x; // global变量void someFunc() { double x; // local变量 std::cin >> x; /原创 2015-09-12 21:11:58 · 453 阅读 · 0 评论 -
Effective C++——条款32(第6章)
明天见原创 2015-09-10 19:55:41 · 617 阅读 · 0 评论 -
Effective C++——条款34(第6章)
条款34: 区分接口继承和实现继承Differentiate between inheritance of interface and inheritance of implementation 表面上直截了当的 public 继承概念,经过更严密的检查之后,发现它由两部分组成:函数接口(function interface)继承和函数实现(function implem原创 2015-09-13 11:49:52 · 488 阅读 · 0 评论 -
Effective C++——条款31(第5章)
明天见原创 2015-09-09 21:29:24 · 782 阅读 · 0 评论 -
Effective C++——条款43(第7章)
条款43: 学习处理模板化基类内的名称Knoew how to access names in templatized base classes 假设需要撰写一个程序,它能够传送信息到若干不同的公司去.信息或是译成密码,或是未加工的文字.如果编译期间就有足够信息来决定哪一个信息传递到哪一家公司,就可以采用基于 template 的解法:class CompanyA {pub原创 2015-09-16 21:04:28 · 786 阅读 · 0 评论 -
Effective C++——条款44(第7章)
条款44: 将与参数无关的代码抽离templatesFactor parameter-independent code out of templates. Templats是节省时间和避免代码重复的一个很好的办法.不再需要键入20个类似的 class 而每一个都带有15个成员函数,只需键入一个 class template,留给编译器去具现化那20个需要的相关的 class原创 2015-09-17 16:48:33 · 587 阅读 · 0 评论 -
Effective C++总结(一)
Effective C++总结导读 详见这里.声明式(declaration)是告诉编译器某个东西的名称和类型,但忽略细节.定义式是编译器为此对象所分配内存的地点.第1章 让自己习惯C++条款01: 视C++为一个语言联邦 详见这里.最简单的方法是将C++视为一个由相关语言组成的联邦而非单一语言.C++主要有以下四个次语言:C,Object-Oriented C原创 2015-09-24 14:54:15 · 462 阅读 · 0 评论 -
Effective C++——条款54,条款55(第9章)
条款54: 让自己熟悉包括TR1在内的标准程序库Familiarize yourself with the standard library, including TR1. c++ Standard(定义C++语言及其标准程序库的规范)早在1998年就被标准委员会核准了.TR1代表"Technical Report 1".在概括论述TR1有些什么之前,先回顾C++98列入的C++原创 2015-09-24 11:31:47 · 413 阅读 · 0 评论 -
Effective C++——条款53(第9章)
明天见原创 2015-09-23 20:03:27 · 460 阅读 · 0 评论 -
Effective C++——条款52(第8章)
条款52: 写了placement new 也要写placement deleteWrite placement delete if you write placement new placement new 和 placement delete 并非在C++常见.回忆条款16和条款17,当写一个如下所示的 new 表达式:Widget* pw = new Widget;原创 2015-09-22 16:28:53 · 493 阅读 · 0 评论 -
Effective C++——条款50(第8章)
条款50: 了解 new 和 delete 的合理替换时机Understand when it makes sence to replace new and delete. 首先怎么会有人想要替换编译器提供的 operator new 和 operator delete 呢?下面是三个最常见的理由: 1.用来检测运用上的错误. 如果自行定义一个 operat原创 2015-09-21 17:32:58 · 585 阅读 · 0 评论 -
Effective C++——条款48(第7章)
条款48: 认识 template 元编程Be aware of template metaprogramming . Template metaprogramming(TMP,模板元编程)是编写 template-based C++程序并执行于编译期的过程.所谓 template metaprogram(模板元程序)是以C++写成,执行于C++编译器内的程序.一旦TMP程序结束原创 2015-09-21 14:18:48 · 477 阅读 · 0 评论 -
Effective C++——条款51(第8章)
条款51: 编写 new 和 delete 时需固守常规Adhere to convention when writing new and delete. 条款50已解释什么时候会想要写个自定义的 operator new 和 operator delete,但并没有解释当那么做时必须遵守什么规则. 实现一致性 opertor new 必须得返回正确的值,内存不足时原创 2015-09-22 13:38:34 · 530 阅读 · 0 评论 -
Effective C++——条款49(第8章)
第8章 定制 new 和 deleteCustomizing new and delete 当计算机环境(例如Java和.NET)夸耀自己内置"垃圾回收能力"的当今,C++对内存管理的纯手工法也许看起来有点老气.但是许多苛刻的系统程序开发人员之所以选择C++,就是因为它允许他们手工管理内存.这样的开发人员研究并学习他们的软件使用内存的行为特征,然后修改分配和归还工作,以求获得原创 2015-09-21 17:27:54 · 424 阅读 · 0 评论 -
Effective C++——条款47(第7章)
明天见原创 2015-09-20 11:06:56 · 572 阅读 · 0 评论 -
Effective C++——条款46(第7章)
明天见原创 2015-09-19 20:44:25 · 472 阅读 · 1 评论 -
Effective C++——条款45(第7章)
条款45: 运用成员函数模板接受所有兼容类型Use member function templates to accept "all compatible types" 所谓智能指针是"行为像指针"的对象,并提供指针没有的机能.例如条款13曾提及std::auto_ptr和tr1::shared_ptr如何能够被用来在正确时机自动删除heap-based资源.STL容器的迭代器几原创 2015-09-18 16:19:49 · 376 阅读 · 0 评论 -
Effective C++——条款26(第5章)
第5章 实现Implementations 大多数情况下,适当提出 class(和 class template)定义以及functions(和function template)声明,是花费最多心力的两件事.一旦正确完成它们,相应的实现大多直截了当.太快定义变量可能造成效率上的拖延;过度使用转型可能导致代码变慢又难维护,又找来微妙难解的错误;返回对象"内部数据的号码牌(h原创 2015-09-06 18:07:07 · 680 阅读 · 0 评论 -
Effective C++——条款29(第5章)
条款29: "为异常安全"而努力是值得的Strive for exception-safe code 假设有个 class 希望用于多线程环境,所以它有个互斥器(mutex)作为并发控制(concurrency control):class PrettyMenu {public: ... void changeBackground(std::istre原创 2015-09-07 12:03:29 · 551 阅读 · 0 评论 -
Effective C++——条款14(第3章)
条款14: 在资源管理类中小心copying行为 Think carefully about copying behavior in resource-managing classes 条款13导入这样的观念:"资源取得时机便是初始化时机"(Resource Acquisition Is Initializaiton,RAII),并以此作为"资源管理类"的脊柱,也描原创 2015-08-31 23:56:28 · 706 阅读 · 0 评论 -
Effective C++——条款13(第3章)
第3章 资源管理 Resource Management 所谓资源就是,一旦用了它,将来必须还给系统.C++程序中最常使用的资源就是动态内存分配(如果分配内存从来都增归还,会导致内存泄露).其他常见的资源还有文件描述符(file descriptors),互斥锁(mutex locks),图形界面中的字型和笔刷,数据库连接,以及网络sockets.不论哪一种资源原创 2015-08-30 23:33:39 · 748 阅读 · 0 评论 -
Effective C++——条款10条,条款11和条款12(第2章)
条款10: 令operator=返回一个reference to *this Have assignment operators return a reference to *this 关于赋值,可以把它们写成连锁形式: int x, y, z;x = y = z = 15; // 赋值连锁形式 赋值采用右结合律,所以上述连锁赋值被解析为:原创 2015-08-29 23:35:32 · 1123 阅读 · 0 评论 -
Effective C++——条款9(第2章)
条款09: 绝不在构造和析构过程中调用 virtual 函数Never call virtual functions during construction or destruction 不应该在构造函数和析构函数期间调用 virtual 函数,因为这样的调用不会带来预想的结果. 假设有个 class 继承体系,用来模塑股市交易如买进,卖出的订单等等.这样的交易一原创 2015-08-28 10:30:56 · 845 阅读 · 0 评论 -
Effective C++——条款8(第2章)
条款08: 别让异常逃离析构函数Prevent exception from leving destructors. C++并不禁止析构函数吐出异常,但它不鼓励这样做.这是有原因的,考虑以下代码:class Widget {public: ... ~Widget() { ... } // 假设这个可能吐出一个异常};void原创 2015-08-28 09:26:47 · 755 阅读 · 0 评论 -
Effective C++——条款6(第2章)
条款06: 若不想使用编译器自动生成的函数,就该明确拒绝Explicitly disallow the use of compiler-generated functions you do not want. 在某些情况下,希望保持对象的唯一性,不想让对象有其他副本.如下:class HomeForSale { ... };HomeForSale h1;HomeFo原创 2015-08-27 13:48:46 · 518 阅读 · 0 评论 -
Effective C++——条款7(第2章)
条款07: 为多态基类声明 virtual 析构函数Declare destructors virtual in polymorphic base classes 设计以下时间基类TimeKeeper:class TimeKeeper {public: TimeKeeper(); ~TimeKeeper();};class AtomicClock原创 2015-08-27 16:57:44 · 799 阅读 · 0 评论 -
Effective C++——条款5(第2章)
第2章 构造/析构/赋值运算Constructors,Destructors,and Assignment Operator 几乎每一个 class 都会有一个或多个构造函数,一个析构函数,一个copy assignment 操作符.条款05: 了解C++默默编写并调用哪些函数Know what functions C++ silently writes an原创 2015-08-27 09:31:13 · 732 阅读 · 0 评论 -
Effective C++——条款1和条款2(第1章)
第一章 让自己习惯C++Accustoming Yourself to C++条款01:视C++为一个语言联邦View C++ as a federation of languages 一开始C++只是C加上一些面向对象特性,但随着这个语言逐渐成熟,它开始接受不同于C with classes的各种观念,特性和变成战略.Exception对函数的结构化带来不同的做法,t原创 2015-08-25 23:33:37 · 687 阅读 · 0 评论 -
Effective C++——条款4(第1章)
条款04: 确定对象被使用前已被初始化Make sure that objects are initialized before they're used 关于"将对象初始化"这事,C++似乎反复无常.如果这样写:int x; 在某些语境下保证被初始化(为0),但在其他语境下却不保证. 读取未初始化的值会导致不明确的行为.可能的情况是读入一些"半随机"bit原创 2015-08-26 14:38:14 · 794 阅读 · 0 评论 -
Effective C++——条款3(第1章)
条款03:尽量使用 constUse const whenever possible const 允许指定一个语义约束(也就是指定一个"不该被改动"的对象),而编译器会强制实施这项约束.它允许告诉编译器和其他程序员其值应该保持不变.只要这(某值保持不变)是事实,因为说出来可以获得编译器的帮助,确保这条约束不被违反. 可以用 const 在 class 外部修饰global或原创 2015-08-26 14:28:19 · 713 阅读 · 0 评论 -
Effective C++——条款15(第3章)
条款15: 在资源管理类中提供对原始资源的访问 Provide access to raw resources in resources-managing classes 资源管理类(resource-managing classes)很棒.它们是对抗资源泄露的堡垒.在一个良好的环境中将依赖这样的classes来处理和资源之间的所有互动.而不是直接处理原始资源,但这个环原创 2015-09-01 00:09:18 · 980 阅读 · 0 评论 -
Effective C++——条款30(第5章)
条款30: 透彻了解 inlining 的里里外外Understand the ins and outs of inlining inline 函数看起来像函数,动作像函数,比宏好得多(详见条款2),可以调用它们又不需要承受函数调用所导致的额外开销. 实际获得的比想到的还多,因为"免除函数调用成本"只是故事的一部分而已.编译器最优化机制通常被设计用来浓缩那些"不含原创 2015-09-08 20:09:40 · 529 阅读 · 0 评论