C++编程规范

当前位置:首页 > 网络编程 > 编程语言与程序设计 > C++编程规范

出版社:人民邮电出版社
出版日期:2006-1
ISBN:9787115142054
作者:(美)Herb Sutter, Andrei Alexandrescu
页数:216页

媒体关注与评论

  今年是C++ 20周年,本书的出版可以说是恰逢其时。本书是近年来最重要的C++图书,凝聚了C++界 20年的集体智慧。荣获今年Jolt生产效率大奖从某种意义上也证明了这一点。请注意它绝不是国内曾经出版的那些“规定代码应该缩进几格” 之类的编码规范书所能相提并论。  它首先是一本所有C++程序员都需要阅读的最佳实践指南,不仅涵盖编程,也涉及类的设计与优化等主题。书中提到的许多应该避免的问题,即使是许多C++老手也会犯。有些反映的是业界最新的经验总结,蕴涵着C++新的改进方向(毕竟,本书的作者之一是C++标准委员会的主席)。有些技术细节非常深入。同时,如果在学习C++的同时,有本书在手,就能很好地避免形成一些常见的误解,重走前人的老路。对相关各知识点的掌握也能更加深入。  其次,它也是开发小组制定自己所用编程规范的很好的起点。由于作者和技术审校团队的权威背景,本书的各种规则几乎都是无可置疑的。以此为参考,能够将各开发小组的规范水平提高一个档次。  最后,本书也是阅读众多C++经典文献的绝佳入口。因为内容是按知识点和条目形式组织的,每个条目最后又有相关的参考文献及其章节编号,查阅非常方便。

内容概要

Herb Sutter,ISO C++标准委员会主席,C++ Users Journal杂志特邀编辑和专栏作家;他目前在微软公司领导NET环境下C++浯言扩展的设计工作除本书外.他还撰写了三本广受赞誉的图书:Exceptional C++ Style、Exceptional C++和More Exceptional C++。 .
Andrei Alexandrescu,世界顶级的C++专家.“C++ Users Journal杂志的专栏作家,他的Modem C++ Design—书曾荣获2001年最佳C++图朽称号.书中所开发的Loki已经成为最负盛名的C++程序库之一。

书籍目录

组织和策略问题第0条 不要拘泥于小节(又名:了解哪些东西不应该标准化)第l条 在高警告级别干净利落地进行编译第2条 使用自动构建系统第3条 使用版本控制系统第4条 在代码审查上投入设计风格第5条 个实体应该只有个紧凑的职责第6条 正确、简单和清晰第第7条 编程中应知道何时和如何考虑可伸缩性第8条 不要进行不成熟的优化第9条 不要进行不成熟的劣化第10条 尽量减少全局和共享数据第11条 隐藏信息第12条 懂得何时和如何进行并发性编程第13条 确保资源为对象所拥有。使用显式的RAII和智能指针编程风格第14条 宁要编译时和连接时错误,也不要运行时错误.第15条 积极使用const第16条 避免使用宏第17条 避免使用“魔数”第18条 尽可能局部地声明变量第19条 总是初始化变量第20条 避免函数过长,避免嵌套过深.第21条 避免跨编译单元的初始化依赖第22条 尽量减少定义性依赖。避免循环依赖第23条 头文件应该自给自足第24条  总是编写内部群include保护符,决不要编写外部#include保护符函数与操作符第25条 正确地选择通过值、(智能)指针或者引用传递参数第26条 保持重载操作符的自然语义第27条 优先使用算术操作符和赋值操作符的标准形式第28条 优先使用++和的标准形式。优先调用前缀形式第29条 考虑重载以避免隐含类型转换第30条 避免重载&&、ll或,(逗号)第3l条 不要编写依赖于函数参数求值顺序的代码类的设计与继承第32条 弄清所要编写的是哪种类第33条 用小类代替巨类第34条 用组合代替继承第35条 避免从并非要设计成基类的类中继承第36条 优先提供抽象接口第37条 公用继承即可替换性。继承,不是为了重用,而是为了被重用第38条 实施安全的改写第39条 考虑将虚拟函数声明为非公用的,将公用函数声明为非虚拟的第40条 要避免提供隐式转换第41条 将数据成员设为私有的,无行为的聚集(C语言形式的struct)除外第42条 不要公开内部数据第43条 明智地使用Pimpl第44条 优先编写非成员非友元函数第45条 总是起提供new和delete第46条 如果提供类专门的new,应该提供所有标准形式(普通、就地和不抛出)构造、析构与复制第47条  以同样的顺序定义和初始化成员变量第48条 在构造函数中用初始化代替赋值第49条 避免在构造函数和析构函数中调用虚拟函数第50条 将基类析构函数设为公用且虚拟的,或者保护且非虚拟的第51条 析构函数、释放和交换绝对不能失败第52条 致地进行复制和销毁-第53条 显式地启用或者禁止复制第54条 避免切片。在基类中考虑用克隆代替复制第55条 使用赋值的标准形式第56条 只要可行,就提供不会失败的swap(而且要正确地提供)名字空间与模块第57条 将类型及其非成员函数接口置于同名字空间中第58条 应该将类型和函数分别置于不同的名字空问中,除非有意想让它们一起工作第59条 不要在头文件中或者样include之前编写名字空间using第60条 要避免在不同的模块中分配和释放内存第61条 不要在头文件中定义具有链接的实体第62条 不要允许异常跨越模块边界传播第63条 在模块的接口中使用具有良好可移植性的类型模板与泛型第64条 理智地结合静态多态性和动态多态性第65条 有意地进行显式自定义第66条 不要特化函数模板第67条 不要无意地编写不通用的代码错误处理与异常第68条 广泛地使用断言记录内部假设和不变式第69条 建立合理的错误处理策略,并严格遵守第70条 区别错误与非错误第71条 设计和编写错误安全代码第72条 优先使用异常报告错误第73条 通过值抛出,通过引用捕获第74条 正确地报告、处理和转换错误第75条 避免使用异常规范STL:容器第76条 默认时使用vector。否则,选择其他合适的容器第77条 用vector和string代替数组第78条 使用vector(和strlng::c-str)与非C++API交换数据第79条 在容器中只存储值和智能指针第80条 用pusn—back代替其他扩展序列的方式第8l条 多用范围操作,少用单元素操作第82条 使用公认的惯用法真正地压缩容量,真正地删除元素STL:算法第83条 使用带检查的STL实现第84条 用算法调用代替手工编写的循环第85条 使用正确的STL查找算法第86条 使用正确的STL排序算法第87条 使谓词成为纯函数第88条 算法和比较器的参数应多用函数对象少用函数第89条 正确编写函数对象类型安全第90条 避免使用类型分支,多使用多态第91条 依赖类型,而非其表示方式第92条 避免使用reinterpreLcast第93条 避免对指针使用static_cast第94条 避免强制转换const第95条 不要使用c风格的强制转换第96条 不要对非POD进行memcpy操作或者memcmp操作第97条 不要使用联合重新解释表示方式第98条 不要使用可变长参数(…)第99条 不要使用失效对象。不要使用不安全函数第100条 不要多态地处理数组参考文献摘要汇总索引

编辑推荐

  《C++编程规范:101条规则准则与最佳实践》涵盖了C++程序设计的方方面面,包括设计和编码风格、函数、操作符、类的设计、继承、构造与析构、赋值、名字空间、模块、模板、泛型、异常、STL容器和算法等。书中对每一条规范都给出了言简意赅的叙述,并辅以实例说明;书中还给出了从类型定义到错误处理等方面大量的C++最佳实践,包括许多最新总结出的和标准化的技术,即使使用C++多年的程序员也会从中受益匪浅。

作者简介

《C++编程规范:101条规则准则与最佳实践》中,两位知名的C++专家将全球C++界20年的集体智慧和经验凝结成一套编程规范。这些规范可以作为每一个开发团队制定实际开发规范的基础,更是每一位C++程序员应该遵循的行事准则。书中对每一条  规范都给出了精确的描述,并辅以实例说明;从类型定义到错误处理,都给出了最佳的C++实践。即使使用C++多年的程序员也会从《C++编程规范:101条规则准则与最佳实践》中受益匪浅。《C++编程规范:101条规则准则与最佳实践》适合于各层次C++程序员使用,也可作为高等院校C++课程的教学参考书。

图书封面


 C++编程规范下载 精选章节试读 更多精彩书评



发布书评

 
 


精彩书评 (总计7条)

  •     其实这本书很鸡肋。因为此书是对一条条的规范、原则、实践等的高度提炼,能力到了自然能理解,能力没到看完也不一定能理解,此时你需要类似《Unix编程艺术》的书,当然你仍然需要足够的实践来支持,要不就会像我一样在这里说大话!如果你是完美主义者,如果你本来就注重思维训练,那么相信你平时就已经在身体力行这书里的大部分规范了。但是即使如此,此书还至少有两个价值:1.措辞优美,并且大量引经据典,可以找到不少其他优秀的书来进一步的阅读;2.让完美主义者避免掉进“过分完美”的陷阱。对了,这类思维、习惯方面的话题,并不要求你一定具有C++的知识,其内容一样适用于其他语言,其他语言的知识也一样能助你理解。
  •     温故而知新,重新复习一些C++的知识,有一段时间,出现了非常多关于C++编程规范类型的书籍。这些类型的书籍,很大部分内容是相同的,个人比较喜欢看《C++编程规范》,100条,条款来自《Effective C++》、《More Effective C++》、《Effective STL》、《Exceptional C++》、《More Exceptional C++》等各类书籍。多年以后重新开始看这本书,又有新的收获:1、不要拘泥小节前段时间进行项目开发,小组内的开发人员可以说都是很优秀的开发人员,大家在一起开发,我想总希望能有一个基本的编程规范,很犹豫对于编程规范定义到什么级别。对于缩进、行的长度、注释、大括号的形式大家都有自己习惯的形式,对于这些编写的规范,说实话真的没有太大的必要。不管哪一种形式,只要代码比较清晰,很快就能习惯,读取代码(Review)都比较容易。对于函数名和变量名则需要统一的命名方式,这是大家都比较容易达成共识的编程规范,不要花太多时间去规范一些没有必要的规则,否则阻力很大,效果很差。2、在高警告级别进行编译最近一些开发工作主要是类库的开发,API的设计,所以对于代码的质量要求很高,这就要求对于编译器的各种警告都非常注意,很多bug的引入就是warning开始,很常见的unsigned int和int的转换比较,unsinged int的--操作、浮点数的精度问题等。3、代码审查上的投入项目的开发很产品的开发,其中一个很大的区别就在于生命周期的长短,项目只要验收了就可以,不一定会有后续的项目,但是产品的开发,生命周期很长(当然,因为产品被淘汰另当别论),代码的质量就非常的重要,根据用户的反馈,产品模块的优化升级。如果代码质量差,优化升级会成为一个很痛苦的过程,在产品的开发过程中,要在代码审查中投入。 4、正确、简单和清晰第一上周和同事进行XP编程,发现同事很喜欢直接用调用函数并将函数的返回值作为参数传递,个人喜欢上非常不喜欢这种优化,一是调试很多时候无法看到返回值(纯虚类的接口)。二代码的清晰被破坏,可读性变差。再则我觉得这种优化根本没有必要,都是基本类型的。5、积极使用Const在做API设计的时候,需要考虑API的各种使用情况,需要提供const和非const的版本。6、考虑将虚拟函数申明为非公用的,将公用函数申明为非虚拟的在API设计中,经常会采用多层设计,实现类的设计中引入了虚拟函数和公用函数,避免公用函数被重载。7、广泛的使用断言记录内部假设和不变式越底层,越要采用断言,避免不要的条件判断影响性能以及错误的引入。8、正确的报告、处理和转换错误API的设计,一定要有这些处理和Log,否则用户无法知道错误的原因,导致可用性非常的差。9、显式定义构造函数、析构函数、拷贝构造函数和复制函数。10、还有一点是关于继承实现中的前置条件和后置条件的定义要非常的清晰明确。《C++编程规范》的很多条例也是根据OOD的五大原则进行设计的。1、单一职责原则(SRP)2、开放-封闭原则3、Liskov替换原则4、依赖倒置原则5、接口隔离原则
  •     这本书相当适合有一定C++编程经验的初级,中级程序员阅读。这本书讨论了101个规则,每个规则都按照,固定的格式(包括条款标题,摘要,讨论,示例等部分)进行说明。这样的编排方式即清晰又符合我们理解接受的渐进过程。也许可以边看书边试着做一些回忆,想想自己是否在编程时候使用或注意到这些规范。还可以问自己一些问题,例如在我们的设计风格中是否注意了,”对一个函数之赋予一种职责“,”正确,简单和清晰第一,软件简单为美(Keep It Simple Software, KISS)“,”优先使用线性算法或者尽可能快的算法:例如O(N)“,”尽量减少全局和共享数据(会增加耦合度,从而降低可维护性,通常还会降低性能)“等等。我们也可以考虑一下我们的编程风格,并问自己: 我们有没有做到避免使用宏, 尽可能局部声明变量, 总是初始化变量,避免函数过长,避免嵌套过深,是否做到确保所编写的每个头文件都能够独自进行编译。C++之父Bjarne Stroustrup说过“软件开发最重要的一个方面就是弄清楚自己要构建的是什么”,对于类的设计与继承这一部分也相当值得一读,例如以下条款“用小类代替巨类”,“ 用组合代替继承”,“避免从并非要设计成基类的类中继承”,“优先提供抽象接口”,“共用继承即可替换性。继承,不是为了重用,而是为了被重用,Liskov替换原则: Liskov Substitution Principle,共用继承所建模的必须总是“是一个is a”,更精确的“其行为象一个 works like a ”关系:所有基类约定必须满足这一点。”等等,也许我们对这些规则都了然于胸,但是我们是否时时刻刻注意到这些规则呢,这本书就提供了这样一个“小声音”,提醒我们,在经过一段时间的编程后,我们也许常常会被一些“坏习惯”占据,这个“小声音”,也许就是摒除这些“坏习惯”的利器,也许你和我一样在编写C++的时候会不自觉地使用了一些不先进的C的方式,例如使用数组,匈牙利标法,switch等等,看了这本书后绝对会大有启发,例如以下的部分书摘:”匈牙利记法:将类型信息并入变量名的记法,是混用了类型不安全语言(特别是C)中的设施,这在面向对象语言中是可以存在的,但是有害无益,在泛型编程则更不不行。所以,任何C++编程规范都不应该要求使用匈牙利记法,而在规范中选择禁用该记法则是合理的。“ ”通过类型分支(type switching)来定制行为既不牢固,容易出错,又不安全,而且是企图用C++编写C代码的明显标志。这是一种很不灵活的技术,要添加新特性时必须回过头对现有代码进行修改。它还不安全,因为添加新类型时,如果忘记修改所有分支,编译器也不会告知。““不要使用C语言风格的数组,指针运算和内存管理原语操作实现数组抽象。使用vector或者string不仅更轻松,而且还有助于编写更安全,伸缩性更好的软件。毋庸置疑,在当今软件中缓冲区溢出和安全缺陷是罪魁祸首。固定长度的数组所带来的愚蠢限制,即使仍在正确界限内,也是软件开发人员的一大困扰。””不要使用C风格的强制转换。“初级,中级程序员看了本书后一定会大有收获,掌握这些规范,也许是成长为优秀程序员的重要的坚实一步。------- ------本文原始地址:http://hanyionet.blogspot.com/2009/09/blog-post_20.html

精彩短评 (总计50条)

  •     所谓规范,多是习惯,如能应用在自己的平日的编程中,将会大大受益
  •     看完了又忘了,o(︶︿︶)o ..
  •     看了, 忘了, 但是印象中书还不错
  •     这是我读过的中文里翻译的最好的一本书。
  •     很实用。不过有一些高级技巧不太懂。
  •     规范对于项目的实施很重要,可以结合一起自动的规范检查工具使用如lint
  •     http://yangyubo.com/google-cpp-styleguide/
  •     有点像Effective C++, 但没有那么精彩。仍是不可多得的好书
  •     C++的书看的越多越觉得自己不懂C++,目前水准还不足以理解里面的好些条款,以后再回头来看吧
  •     花了晚上两小时就看完了,很多条款和effective系列是重合的。但也有一些很有用的条款,比如头文件中链接实体的extern处理。
  •     最近看书很浮躁。。。等于翻了目录,囫囵吞枣。有实践机会边看边学的话应该会好点。但是最近总是只看书不写代码。
  •     粗读~
  •     边读边做笔记,因为之前读过effective c++那一套,所以这个读起来很快,我基本上把一些精华的语句都整理下来了,没事翻翻看,真的能记住大部分并且在实际编程中能运用的上就很好了
  •     try keeping those in mind while coding
  •     看了,也忘得差不多了
  •     通过编程习惯,来减少编程错误
  •     可能其它的书看多了,看到的时候感觉大多都有见过
  •     已经完全想不起来这本书说啥了...
  •     你读完了effective xxx的三本书?这本书仍然得读一读。
  •     书是好书,翻译是硬伤。
  •     言简意赅。不管是写代码还是做设计,都很有参考价值。
  •     还是很不错的,言简意赅
  •     有一半内容能看懂,觉得有用,还有一半就不太理解了。顺便提一句,译者翻译的很用心,少见的业界良心。
  •     几年前看的电子版,除了C++语法 这本书和C++必知必会都可以看一看
  •     大师的经验与忠告
  •     多是耳熟能详的建议,难怪有高手评价不高。以我的现阶段的水平看此书,觉得非常流畅,比著名的Effective C++看起来还舒服。简洁而不罗嗦,避开了一些C++不常见的阴暗角落。若是说不足,那就是在本书在最佳实践上着墨不多,而且这部分讲得原则较多,代码实例较少。或许作者认为他说的那些原则其实已经就是广义上的最佳实践了吧。
  •     看了这个,后来用java就觉得java好多了
  •     需要有足够多的经验看了才有感觉,书写得比较笼统
  •     C++领域的细分之作,跟人觉得看过了Effective系列之后,看看此书的目录就足以了。
  •     这个比较学术,不知道C++还能走多远。
  •     cpp玩家必读
  •     被一星翻译给坑掉的五星内容,后悔没直接入英文版。。。
  •     很有用,回头总结
  •     大神的作品
  •     读 (More) Effective C++ 就够了,没必要再读这个;不过时间紧,读这书快速吸收也未尝不可,只不过现在已经绝版了。
  •     名过其实了,不推荐
  •     如看心灵鸡汤。
  •     其实就是三条:第一,尽量解耦,不要依赖;第二,不要使用让人有歧义或异议的东西;第三,不要过多地假设其行为;
  •     短小精悍、没基础的不建议看
  •     大学时候总喜欢找这些的东西看,拿到手又看不下去。大抵大学里就是这个样子了。标记一下。
  •     光看没有,主要是要有体会。。
  •     这本书需要你至少是中级C++程序员,否则很多条款的设计理念你是理解不了背后的思想的。另外,如果阅读过《Effective C++》系列和《Exceptional C++》系列一共五本书的话,那么阅读本书会非常轻松的。
  •     得多看几遍
  •     从组织策略,编程风格,函数与操作符,类设计与继承,构造析构与复制,名字空间与模块,模板与泛型,异常,STL,算法,类型安全这几块阐述了C++的编程中权威的规范。
  •     可以作为索引, 作者意图也如此, 先知其然: 对于初学者解释过于简短, 对于有经验的又过于浅显, 适合有两三年C++经验的人. 原书4星, 翻译2星, 平均3星
  •     C++巅峰之作
  •     C++编程实践的大师智慧,对面向对象、泛型的思想深刻探索
  •     书评 笔记
  •     很不错吧,很多和effictive类似,stl有新的东西,我感觉
  •     涵盖了很多C++的编程实践经验,适合于实践中去应证
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024