Effective C++第三版中文版pdf免费版

编辑点评:改善程序与设计的55个具体做法(第3版 中文版)

C++巨擘梅耶成名作开辟编程学习新路径统领职业精进荐书,Effective C++:改善程序与设计的55个具体做法原版第三版中文版本,精品下载站免费为大家提供下载,可以迅速提升自己的c++编程功力,来自作者实践智慧的一次提炼和升华。

Effective C++第三版中文版pdf免费版

effective c++中文版.pdf预览

目录大全

译序 vii

中英简繁术语对照 ix

目录 xvii

序言 xxi

致谢 xxiii

导读 1

1. 让自己习惯C++ 11

Accustoming Yourself to C++ 11

条款01:视C++ 为一个语言联邦 11

View C++ as a fedueration of languages 11

条款02:尽量以const, enum, inline替换 #define 13

Prefer consts,enums, and inlines to #defines. 13

条款03:尽可能使用const 17

Use const whenever possible. 17

条款04:确定对象被使用前已先被初始化 26

Make sure that objects are initialized before they're used. 26

2. 构造/析构/赋值运算 34

Constructors, Destructors, and Assignment Operators 34

条款05:了解C++ 默默编写并调用哪些函数 34

Know what functions C++ silently writes and calls. 34

条款06:若不想使用编译器自动生成的函数,就该明确拒绝 37

Explicitly disallow the use of compiler-generated functions you do not want. 37

条款07:为多态基类声明virtual析构函数 40

Declare destructors virtual in polymorphic base classes. 40

条款08:别让异常逃离析构函数 44

Prevent exceptions from leaving destructors. 44

条款09:绝不在构造和析构过程中调用virtual函数 48

Never call virtual functions during construction or destruction. 48

条款10:令operator= 返回一个reference to *this 52

Have assignment operators return a reference to *this. 52

条款11:在operator= 中处理「“自我赋值」” 53

Handle assignment to self in operator=. 53

条款12:复制对象时勿忘其每一个成分 57

Copy all parts of an object. 57

3. 资源管理 61

Resource Management 61

条款13:以对象管理资源 61

Use objects to manage resources. 61

条款14:在资源管理类中小心coping行为 66

Think carefully about copying behavior in resource-managing classes. 66

条款15:在资源管理类中提供对原始资源的访问 69

Provide access to raw resources in resource-managing classes. 69

条款16:成对使用new和delete时要采取相同形式 73

Use the same form in corresponding uses of new and delete. 73

条款17:以独立语句将newed对象置入智能指针 75

Store newed objects in smart pointers in standalone statements. 75

4. 设计与声明 78

Designs and Declarations 78

条款18:让接口容易被正确使用,不易被误用 78

Make interfaces easy to use correctly and hard to use incorrectly. 78

条款19:设计class犹如设计type 84

Treat class design as type design. 84

条款20:宁以pass-by-reference-to-const替换pass-by-value 86

Prefer pass-by-reference-to-const to pass-by-value. 86

条款21:必须返回对象时,别妄想返回其reference 90

Don't try to return a reference when you must return an object. 90

条款22:将成员变量声明为private 94

Declare data members private. 94

条款23:宁以non-member、non-friend替换member函数 98

Prefer non-member non-friend functions to member functions. 98

条款24:若所有参数皆需类型转换,请为此采用non-member函数 102

Declare non-member functions when type conversions should apply to all parameters. 102

条款25:考虑写出一个不抛异常的swap函数 106

Consider support for a non-throwing swap. 106

5. 实现 113

Implementations 113

条款26:尽可能延后变量定义式的出现时间 113

Postpone variable definitions as long as possible. 113

条款27:尽量少做转型动作 116

Minimize casting. 116

条款28:避免返回handles指向对象内部成分 123

Avoid returning "handles" to object internals. 123

条款29:为“「异常安全」”而努力是值得的 127

Strive for exception-safe code. 127

条款30:透彻了解inlining的里里外外 134

Understand the ins and outs of inlining. 134

条款31:将文件间的编译依存关系降至最低 140

Minimize compilation dependencies between files. 140

6. 继承与面向对象设计 149

Inheritance and Object-Oriented Design 149

条款32:确定你的public继承塑模出is-a关系 150

Make sure public inheritance models "is-a." 150

条款33:避免遮掩继承而来的名称 156

Avoid hiding inherited names. 156

条款34:区分接口继承和实现继承 161

Differentiate between inheritance of interface and inheritance of implementation. 161

条款35:考虑virtual函数以外的其它其他选择 169

Consider alternatives to virtual functions. 169

条款36:绝不重新定义继承而来的non-virtual函数 178

Never redefine an inherited non-virtual function. 178

条款37:绝不重新定义继承而来的缺省参数值 180

Never redefine a function's inherited default parameter value. 180

条款38:通过复合塑模出has-a或"根据某物实现出" 184

Model "has-a" or "is-implemented-in-terms-of" through composition. 184

条款39:明智而审慎地使用private继承 187

Use private inheritance judiciously. 187

条款40:明智而审慎地使用多重继承 192

Use multiple inheritance judiciously. 192

7. 模板与泛型编程 199

Templates and Generic Programming 199

条款41:了解隐式接口和编译期多态 199

Understand implicit interfaces and compile-time polymorphism. 199

条款42:了解typename的双重意义 203

Understand the two meanings of typename. 203

条款43:学习处理模板化基类内的名称 207

Know how to access names in templatized base classes.207

条款44:将与参数无关的代码抽离templates 212

Factor parameter-independent code out of templates. 212

条款45:运用成员函数模板接受所有兼容类型 218

Use member function templates to accept "all compatible types." 218

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

Define non-member functions inside templates when type conversions are desired. 222

条款47:请使用traits classes表现类型信息 226

Use traits classes for information about types. 226

条款48:认识template元编程 233

Be aware of template metaprogramming. 233

8. 定制new和delete 239

Customizing new and delete 239

条款49:了解new-handler的行为 240

Understand the behavior of the new-handler. 240

条款50:了解new和delete的合理替换时机 247

Understand when it makes sense to replace new and delete. 247

条款51:编写new和delete时需固守常规 252

Adhere to convention when writing new and delete. 252

条款52:写了placement new也要写placement delete 256

Write placement delete if you write placement new. 256

9. 杂项讨论 262

Miscellany 262

条款53:不要轻忽编译器的警告 262

Pay attention to compiler warnings. 262

条款54:让自己熟悉包括TR1在内的标准程序库 263

Familiarize yourself with the standard library, including TR1. 263

条款55:让自己熟悉Boost 269

Familiarize yourself with Boost. 269

A 本书之外 273

B 新旧版条款对映 277

索引 280

内容简介

有人说C++程序员可以分为两类,读过Effective C++的和没读过的。世界C++大师Scott Meyers成名之作的第三版的确当得起这样的评价。当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机。

在国际上,本书所引起的反响,波及整个计算机技术的出版领域,余音至今未绝。几乎在所有C++书籍的推荐名单上,《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》都会位于前三名。作者高超的技术把握力、独特的视角、诙谐轻松的写作风格、独具匠心的内容组织,都受到极大的推崇和仿效。这种奇特的现象,只能解释为人们对这本书衷心的赞美和推崇。

《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》不是读完一遍就可以束之高阁的快餐读物,也不是用以解决手边问题的参考手册,而是需要您去反复阅读体会的,C++是真正程序员的语言,背后后精神的思想与无以伦比的表达能力,这使得它具有类似宗教般的魅力。希望这本书能够帮您跨越C++的重重险阻,领略高处才有的壮美风光,做一个成功而快乐的C++程序员。

序言阅读

序言

1991年我写下《Effective C++》第一版。1997年撰写第二版时我更新了许多重要内容,但为了不让熟悉第一版的读者感到困惑,我竭尽所能保留原始结构:原先50个条款中的48个标题基本没变。如果把书籍视为一栋房屋,第二版只是更换地毯灯饰,重新粉刷一遍而已。

到了第三版,修缮工作进一步深入壁骨墙筋(好几次我甚至希望能够翻新地基)。1991年起C++ 世界经历了巨大变革,而本书目标――在一本小而有趣的书中确认最重要的一些C++ 编程准则――却已不再能够由15年前建立的那些条款体现出来。「“C++ 程序员拥有C背景」”这句话在1991年是个合理假设,如今C++ 程序员却很可能来自Java或C# 阵营。继承(inheritance)和面向对象编程(object-oriented programming)在1991年对大多数程序员都很新鲜,如今程序员已经建立良好概念,异常(exceptions)、模板(templates)和泛型编程(generic programming)才是需要更多引导的领域。1991年没人听过所谓设计模式(design patterns),如今少了它很难讨论软件系统。1991年C++ 正式标准才刚要上路,如今C++ 标准规格规范已经8岁,新版规格规范蓄势待发。

为了对付这些改变,我把所有条款抹得一干乾二净,然后问自己「“2005年什么是对C++ 程序员最重要的忠告?」”答案便是第三版中的这些条款。本书有两个新章,一个是资源管理(resource management),一个是模板编程(programming with templates)。实际上template(模板)这东西遍布全书,因为它们几乎影响了C++ 的每个角落。本书新素材还包括在exceptions(异常)概念下编程、套用设计模式、以及运用新的TR1程序库设施(TR1于条款54描述)。本书也告诉大家在单线程系统(single-threaded systems)中运作良好但可能不适用于多线程系统(multithreaded systems)的某些技术和作法做法。本书半数以上内容是新的。在此同时第二版大部分基础信息仍然很重要,所以我找出一个保留它们的办法:你可以在附录B找到第2、第三两版的条款对映对应表。

我努力让本书达到我所能够达到的最佳状态,但这并不表示它已臻完美。如果你认为某些条款不适合做为作为一般性忠告,或你有更好的办法完成本书所谈的某件工作,或书中某些技术讨论不够清楚不够完全,甚或有所误导,请告诉1、如果你找出任何错误 ――― 技术上的、文法上的、排版印刷上的,不论哪一种 ――― 也请告诉1、我很乐意将第一位提出问题并吸引我注意的朋友加入下次印刷的致谢名单中。

即使本书条款个数扩充为55,这一整组编程准则还谈不上完备。然而毕竟整理出优良准则――几乎任何时间适用于任何应用程序的准则――比想象中困难得多。如果你有其它其他编程准则的想法或建议,我将乐以与闻。

我手上维护本书第一刷以来的变化清单,其中包括错误修订、进一步说明和技术更新。这份清单放在网址为http://aristeia.com/BookErrata/ec++3e-errata.html的"Effective C++ Errata" 网页上。如果你希望在这份清单更新时获得通知,请加入我的电邮名录邮件列表。这份列表名录用来发布消息给可能对我的专业工作感兴趣的人士,详情请见http://aristeia.com/MailingList/。

致谢

Acknowledge

《Effective C++》已经面世15年了,我开始学习C++ 则是在书写此书的前5年。也就是说 "Effective C++项目" 已经发展两个年代了。此期间我得益于数百(数千?)人的深刻知识、对我的建议与修正,以及偶发的一些目瞪口呆的事绩。这些人帮助我更加完善《Effective C++》,我要对他们全体表示感谢。

我已经放弃追踪「“在哪儿学到什么」”的历史,但永远记得有个公众信息来源不断带给我帮助:Usenet C++ newsgroups,特别是comp.lang.c++.moderated和comp.std.c++。本书许多――也许是大多数――条款得益于这些讨论群所突出的若干技术想法和后续调查与诊疗。

关于第三版新内容,Steve Dewhurst和我一起讨论了最初的条款名单。条款11中关于「“藉由copy-and-swap实现operator=」”的构想来自Herb Sutter在此主题的作品,像是《Exceptional C++》(Addison-Wesley, 2000)条款13、RAII(见条款13)源自Bjarne Stroustrup的《The C++ Programming Language》(Addison-Wesley, 2000)。条款17背后的想法来自Boost shared_ptr网页上的 "“Best Practices”" 节区(http://boost.org/libs/smart_ptr/shared_ptr.htm#BestPractices),又得到Herb Sutter的《More Exceptional C++》(Addison-Wesley, 2002)条款21的琢磨。条款29强烈受到Herb Sutter在此主题上的广泛作品的影响,像是《Exceptional C++》条款8~19,《More Exceptional C++》条款17~23,以及《Exceptional C++ Style》(Addison-Wesley, 2005)条款11~13;David Abrahams帮助我更好地了解三个异常安全性保证。条款35的NVI 手法来自Herb Sutter写于《C/C++ Users Journal》2001年9月份的 "Virtuality" 专栏。同一条款中的Template Method和Strategy设计模式来自《Design Patterns》(Addison-Wesley, 1995),作者是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides。条款37所说的NVI使用手法,概念来自Hendrik Schober。David Smallberg 给了我动机在条款38写出一个定制型set 实现品。条款39提到EBO通常只在多重继承中才可用,这个构想源自David Vandevoorde和 Nicolai M. Josuttis合着著的《C++ Templates》(Addison-Wesley, 2003)。条款42中我对typename的最初理解来自Greg Comeau主持的 "C++ and C FAQ"(http://www. comeaucomputing.com/techtalk/#typename),Leor Zolman则帮助我认知我的最初了解并不正确(是我的错,和Greg无关)。条款46的本质源自于Dan Sak的谈话,"Making New Friends"。条款52末尾的那个想法「“如果你声明一版operator new,你也应该声明其对应的delete伙伴”」源自Herb Sutter的《Exceptional C++ Style》条款22、我从David Abrahams身上更多了解了Boost的检评过程(条款55有一份摘要)。

上面所说关于我向谁或从某处学习某一技术,并不必然表示谁或某处就是该技术的发明人或发表处。

我的笔记还告诉我,我也使用了来自Steve Clamage, Antoine Trux, Timothy Knox和Mike Kaelbling的信息,可惜这份笔记没有提到如何以及在哪儿学到什么。

第一版草稿由Tom Cargill, Glenn Carroll, Tony Davis, Brian Kernighan, Jak Kirman, Doug Lea, Moises Lejter, Eugene Santos, Jr., John Shewchuk, John Stasko, Bjarne Stroustrup, Barbara Tilly和Nancy L. Urbano共同检阅。我收到了一些改善建议并纳入后来刷次,这些建议来自Nancy L. Urbano, Chris Treichel, David Corbin, Paul Gibson, Steve Vinoski, Tom Cargill, Neil Rhodes, David Bern, Russ Williams, Robert Brazile, Doug Morgan, Uwe Steinmüller, Mark Somer, Doug Moore, David Smallberg, Seth Meltzer, Oleg Shteynbuk, David Papurt, Tony Hansen, Peter McCluskey, Stefan Kuhlins, David Braunegg, Paul Chisholm, Adam Zell, Clovis Tondo, Mike Kaelbling, Natraj Kini, Lars Nyman, Greg Lutz, Tim Johnson, John Lakos, Roger Scott, Scott Frohman, Alan Rooks, Robert Poor, Eric Nagler, Antoine Trux, Cade Roux, Chandrika Gokul, Randy Mangoba和Glenn Teitelbaum。

第二版草稿由以下人士共同检阅:Derek Bosch, Tim Johnson, Brian Kernighan, Junichi Kimura, Scott Lewandowski, Laura Michaels, David Smallberg, Clovis Tondo, Chris Van Wyk和Oleg Zabluda。我收到来自以下人士的意见并因此对新刷有所帮助:Daniel Steinberg, Arunprasad Marathe, Doug Stapp, Robert Hall, Cheryl Ferguson, Gary Bartlett, Michael Tamm, Kendall Beaman, Eric Nagler, Max Hailperin, Joe Gottman, Richard Weeks, Valentin Bonnard, Jun He, Tim King, Don Maier, Ted Hill, Mark Harrison, Michael Rubenstein, Mark Rodgers, David Goh, Brenton Cooper, Andy Thomas-Cramer, Antoine Trux, John Wait, Brian Sharon, Liam Fitzpatrick, Bernd Mohr, Gary Yee, John O'Hanley, Brady Patterson, Christopher Peterson, Feliks Kluzniak, Isi Dunietz, Christopher Creutzi, Ian Cooper, Carl Harris, Mark Stickel, Clay Budin, Panayotis Matsinopoulos, David Smallberg, Herb Sutter, Pajo Misljencevic, Giulio Agostini, Fredrik Blomqvist, Jimmy Snyder, Byrial Jensen, Witold Kuzminski, Kazunobu Kuriyama, Michael Christensen, Jorge Yá?ez Teruel, Mark Davis, Marty Rabinowitz, Ares Lagae和Alexander Medvedev.

第三版早期部分草稿由以下人士共同检阅:Brian Kernighan, Angelika Langer, Jesse Laeuchli, Roger E. Pedersen, Chris Van Wyk, Nicholas Stroustrup和Hendrik Schober。完整草稿由以下人士共同检阅:Leor Zolman, Mike Tsao, Eric Nagler, Gene Gutnik, David Abrahams, Gerhard Kreuzer, Drosos Kourounis, Brian Kernighan, Andrew Kirmse, Balog Pal, Emily Jagdhar, Eugene Kalenkovich, Mike Roze, Enrico Carrara, Benjamin Berck, Jack Reeves, Steve Schirripa, Martin Fallenstedt, Timothy Knox, Yun Bai, Michael Lanzetta, Philipp Janert, Guido Bartolucci, Michael Topic, Jeff Scherpelz, Chris Nauroth, Nishant Mittal, Jeff Somers, Hal Moroff, Vincent Manis, Brandon Chang, Greg Li, Jim Meehan, Alan Geller, Siddhartha Singh, Sam Lee, Sasan Dashtinezhad, Alex Marin, Steve Cai, Thomas Fruchterman, Cory Hicks, David Smallberg, Gunavardhan Kakulapati, Danny Rabbani, Jake Cohen, Hendrik Schober, Paco Viciana, Glenn Kennedy, Jeffrey D. Oldham, Nicholas Stroustrup, Matthew Wilson, Andrei Alexandrescu, Tim Johnson, Leon Matthews, Peter Dulimov和Kevlin Henney。某些个别条款的草稿由Herb Sutter和Attila F. Feher检阅。

检阅一份不够洗炼(而且可能尚未完成)的手稿是件吃力的工作,在时间压力之下进行只会使得它更困难。我要感谢这么多人愿意为我做这件事。

如果对讨论素材缺乏背景,而又期望捕捉手稿中的每一个问题,检阅工作将更加困难。令人惊讶的是还是有人选择成为文字编辑。Chrysta Meadowbrooke是本书的文字编辑,她的周密工作揭露出许多逃过其它其他每一双眼睛的问题。

Leor Zolman在正式检阅前先以多种编译器检验所有代码,在我校订手稿之后又做一次。如果书中仍然存在任何错误,全是我的责任。Karl Wiegers和(特别是)Tim Johnson提供我快速而有帮助的反馈。

John Wait是我的前两版编辑,有点傻傻地又签下这一份责任约。他的助理Denise Mickelsen熟练地处理我频繁的纠缠,带着愉快的微笑(至少我认为她是。呃,我从未见过她)。Julie Nahil 向来扮演救火队角色吸着截短的吸管并因此成为我的产品经理。她以非凡的镇定指挥产品计划内的六周通宵工作。John Fuller(她的老板)和Marty Rabinowitz(他的老板)也协助解决了产品发行量问题。Vanessa Moore的正式工作是提供FrameMaker和PDF支持,但她也协助制作附录B的条目并格式化打印于封底里。Solveig Haugland协助将索引格式化。Sandra Schroeder和Chuti Prasertsith负责封面设计,Chuti总是在每次我说『“如果把这张相片加上那个颜色的线条会怎样?』”时修订封面。Chanda Leary-Coutu对市场营销举重若轻。

在我忙于手稿的数月之中,电视影剧集Buffy the Vampire Slayer常常帮助我在每天工作结束后解压。带着极大的克制我才能够不让Buffyspeak的身影进入本书。Kathy Reed于1971年教我写程序,我很高兴我们保持友谊至今。Donald French雇用我和Moises Lejter于1989年建立起C++ 培训教材(这项计划诱使我真正了解C++),1991年他又聘我在Stratus Computer体现它们。该班学生鼓励我写下最终成为本书第一版的东西。Don也将我介绍给John Wait,他同意出版它们。

我的妻子Nancy L. Urbano持续鼓励我写作,即使在我完成了七本书、一张CD改写版、一篇论文之后。她有令人难以置信难以致信的忍耐、自制与宽容。没有她我无法完成我所完成的任何事情。

自始至终,我们的狗儿Persephone是我们无可取代的同伴。令人悲伤的是,在这个项目的大部分时间里,她和我们之间的交往关系已经改为办公室内的一坛骨灰瓮。我们十分怀念她。

导读

Introduction

学习程序语言根本大法是一回事;学习如何以某种语言设计并实现高效程序则是另一回事。这种说法对C++ 尤其适用,因为C++ 以拥有罕见的威力和丰富的表达能力为傲。只要适当使用,C++ 可以成为工作上的欢愉伙伴。巨大而变化多端的设计可以被直接表现出来,并且被有效实现出来。一组明智选择并精心设计的classes, functions和templates可使程序编写容易、直观、高效、并且远离错误。如果你知道怎么做,写出有效的C++ 程序并不太困难。然而如果没有良好培训,C++ 可能会导致你的代码难以理解、不易维护、不易扩充、效率低下又错误连连。

本书的目的是告诉你如何有效运用C++。我假设你已经知道C++ 是个语言并且已经对它有某些使用经验。这里提供的是这个语言的使用导引,使你的软件易理解、易维护、可移植、可扩充、高效、并且有着你所预期的行为。

我所提出的忠告大致分为两类:一般性的设计策略,以及带有具体细节的特定语言特性。设计上的讨论集中于「“如何在两个不同作法做法中择一完成某项任务」”。你该选择inheritance(继承)还是templates(模板)?该选择public继承还是private继承?该选择private继承还是composition(复合)?该选择member函数还是non-member函数?该选择pass-by-value还是pass-by-reference?在这些选择点上做出正确决定很重要,因为一个不良的决定有可能不至于很快带来影响,却在发展后期才显现恶果,那时候再来矫正往往既困难又耗时间,而且代价昂贵。

即使你完全知道该做什么,完全进入正轨还是可能有点棘手。什么是assignment 操作符的适当返回类型(return type)?何时该令析构函数为virtual?当operator new无法找到足够内存时该如何行事?榨出这些细节很是重要,因为如果疏忽而不那么做,几乎总是导致未可预期的、也许神秘难解的程序行为。本书将帮助你趋吉避凶。

这并不是一本范围广泛的C++ 参考书。这是一份55个特定建议(我称之为条款)的集合,谈论如何强化你的程序和设计。每个条款有相当程度的独立性,但大多数也参考其它其他条款。因此阅读本书的一个方式是,从你感兴趣的条款开始,然后看它逐步把你带往何方。

本书也不是一本C++ 入门书籍。例如在第2章中我热切告诉你实现构造函数(constructors)、析构函数(destructors)和赋值操作符(assignment operators)的一切种种,但我假设你已经知道或有能力在其它其他地方学得这些函数的功能以及它们如何声明。市面上有许多C++ 书籍内含这类信息。

本书目的是要强调那些常常被漠视的C++ 编程方向与观点。其它其他书籍描述C++ 语言的各个成分,本书告诉你如何结合那些成分以便最终获得有效程序。其它其他书籍告诉你如何让程序通过编译,本书告诉你如何回避编译器难以显露的问题。

在此同时,本书将范围限制在标准C++ 上头。书内只会出现官方规格书规范上所列的特性。本书十分重视移植性,所以如果你想找一些与平台相依的秘诀和窍门,这里没有。

另一个你不会在本书发现的是C++ 福音书――走向完美C++ 软件的唯一真理之路。本书每个条款都提供引导,告诉我们如何发展出更好的设计,如何避免常见的问题,或是如何达到更高的效率,但没有任何一个条款放之四海皆准、一体适用。软件设计和实现是复杂的差使,被硬件、操作系统、应用程序的约束条件涂上五颜六色,所以我能做的最好的就是提供指南,让你得以创造出更棒的程序。

如果任何时间你都遵循每一条准则,不太可能掉入C++ 最常见的陷阱中。但是所谓准则天生就带有例外。这就是为什么每个条款都有解释与说明。这些解释与说明是本书最重要的一部分。惟惟有了解条款背后的基本原理,你才能够决定是否将它套用于你所开发的软件,并奉行其所昭示的独特约束。

本书的最佳用途就是彻底了解C++ 如何行为、为什么那样行为,以及如何运用其行为形成优势。盲目应用书中条款是非常不适合的。但如果没有好理由,你或许也不该违反任何一个条款。

作者介绍

Scott Meyers,是全世界知名的C++软件开发专家之一。他是畅销书《Effective C++》系列(Effective C++,More Effective C++,Effective STL)的作者,又是创新产品《Effective C++ CD》的设计者和作者,也是Addison-Wesley的“Effective Software Development Series”顾问编辑,以及《Software Development》杂志咨询板成员。他也为若干新公司的技术咨询板提供服务。Meyers于1993年自Brown大学获得计算机博士学位。

阅读剩余
THE END