第一图书网

C++编程规范

Herb Sutter,Andrei Alexandrescu 人民邮电出版社
出版时间:

20101112  

出版社:

人民邮电出版社  

作者:

Herb Sutter,Andrei Alexandrescu  

页数:

216  

译者:

刘基诚  

Tag标签:

无  

前言

尽早进入正轨:以同样的方式实施同样的过程。不断积累惯用法。 将其标准化。如此,你与莎士比亚之间的唯一区别将只是掌握 惯用法的多少,而非词汇的多少。 ——Alan Perlis 标准最大的优点在于,它提供了如此多样的选择。 ——出处尚无定论 我们之所以编写本书,作为各开发团队编程规范的基础,有下面两个主要原因。 编程规范应该反映业界最久经考验的经验。它应该包含凝聚了经验和对语言的深刻理解的公认的惯用法。具体而言,编程规范应该牢固地建立在大量丰富的软件开发文献的基础之上,把散布在各种来源的规则、准则和最佳实践汇集在一起。 不可能存在真空状态。通常,如果你不能有意识地制定合理的规则,那么就会有其他人推行他们自己喜欢的规则集。这样产生的编程规范往往具有各种最不应该出现的属性。例如,许多这样的编程规范都试图强制尽量少地按C语言的方式使用C++。 许多糟糕的编程规范都是由一些没有很好地理解语言、没有很好地理解软件开发或者试图标准化过多东西的人制定的。糟糕的编程规范会很快丧失可信度,如果程序员不喜欢或者不同意其中一些糟糕的准则,那么即使规范中有一些合理的准则,也可能被不抱幻想的程序员所忽略,这还是最好的情况,最坏的情况下,糟糕的标准可能真会被强制执行。 如何使用本书 三思而行。应该遵循好的准则,但是不要盲从。在本书的各准则中,请注意“例外情况”部分阐明了该准则可能不适用的不太常见的情况。任何准则,无论如何正确(当然,我们自认为本书中的准则是正确的),都不能代替自己的思考。 每个开发团队都应该制定自己的标准,制定标准的时候都应该尽职尽责。这项工作是整个团队的事情。如果你是团队负责人,应该让团队成员都参与制定标准。人们当然更愿意遵守“自己的”标准,而非别人强加的一堆规矩。 编写本书的目的是为各开发团队提供编程规范的基础和参考。它并不是要成为终极编程规范,因为不同的团队会有适合特定群体或者特定任务的更多准则,应该大胆地将这些准则加入本书的条款中。但是我们希望本书能够通过记载和引用广泛接受的、权威的、几乎可以通用的(“例外情况”指出的除外)实践经验,减少读者制定或重新制定自己的编程规范的工作量,从而帮助提高读者所用编程规范的质量和一致性。 让团队人员阅读这些准则及其原理阐释(也就是本书全文,根据需要还包括所选条款引用的其他书籍和论文),共同决定是否有团队根本无法接受的内容(比如,由于某些项目特殊的情况),然后实践其余规范。一旦采纳,如果未与整个团队协商,任何人不得违反团队编程规范。 最后,团队还需定期复查这些准则,加入实际应用中得出的经验和反馈。

内容概要

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

作者简介

作者:(加拿大)萨特(Herb Sutter) (罗马)亚历山德雷斯库(Andrei Alexandrescu) 译者:刘基诚萨特,(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条 不要拘泥于小节(又名:了解哪些东西不应该标准化)  第1条 在高警告级别干净利落地进行编译  第2条 使用自动构建系统  第3条 使用版本控制系统  第4条 做代码审查 9设计风格  第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条 避免重载&&、||或 ,(逗号)  第31条 不要编写依赖于函数参数求值顺序的代码 类的设计与继承  第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(而且要正确地提供) 名字空间与模块 模板与泛型 错误处理与异常 STL:容器 STL:算法 类型安全 参考文献 摘要汇总 索引 

章节摘录

插图:外部加锁:调用者负责加锁。在这种选择下,由使用对象的代码负责了解是否跨线程共享了对象,如果是,还要负责串行化所有对该对象的使用。例如,字符串类型通常使用外部加锁(或者不变性,见第三种选择)。内部加锁:每个对象将所有对自己的访问串行化,通常采用为每个公用成员函数加锁的方法来实现,这样调用者就可以不用串行化对象的使用了。例如,生产者/消费者队列通常使用内部加锁,因为它们存在的目的就是被跨线程共享,而且它们的接口就是为了在单独的成员函数调用(Push,Pop)期间能够进行适当的层次加锁而设计的。更一般的情况下,需要注意,只有在知道了以下两件事情之后这个选项才适用。第一,必须事先知道该类型的对象几乎总是要被跨线程共享的,否则到头来只不过进行了无效加锁。请注意大多数类型都不会遇到这种情况,即使是在多线程处理分量很重的程序中,大多数对象也不会被跨线程共享(这是好现象,见第10条)。第二,必须事先知道成员函数级加锁的粒度是合适的,而且能满足大多数调用者的需要。具体而言,类型接口的设计应该有利于粗粒度的、自给自足的操作。如果调用者总是需要对多个而不是一个操作加锁,那么就不能满足需要了,只能通过增加更多的(外部)锁,将单独加锁的函数组装成一个更大规模的已加锁工作单位。例如一个容器类型,如果它返回一个迭代器,则迭代器可能在用到之前就失效了;如果它提供find之类的能返回正确答案的成员算法,那么答案可能在用到之前就出错了;如果它的用户想要编写这样的代码:if(c,empty())c.push-back(x);,同样会出现问题。(更多的例子,参阅[Sutter02]。)在这些情况下,调用者需要进行外部加锁,以获得生存期能够跨越多个单独成员函数调用的锁,这样一来每个成员函数的内部加锁就毫无用武之地了。


编辑推荐

《C++编程规范:101条规则、准则与最佳实践》:良好的编程规范可以改善软件质量,缩短上市时间,提升团队效率,简化维护工作。在《C++编程规范:101条规则、准则与最佳实践》中,两位全世界最受尊敬的c++专家将全球c++社区的集体智慧和经验凝结成一整套编程规范。这些规范可以作为每一个开发团队制定实际开发规范的基础,更是每一位c++程序员应该遵循的行事准则。《C++编程规范:101条规则、准则与最佳实践》涵盖了c++程序设计的每一个方面,包括设计和编码风格、函数、操作符、类的设计、继承、构造与析构、赋值、名字空间、模块、模板、泛型、异常、stl容器和算法等。书中对每一条规范都给出了言简意赅的叙述,并辅以实例说明;另外还给出了从类型定义到错误处理等方面的大量c++ 最佳实践,包括许多最新总结和标准化的技术,即使使用c++多年的程序员也会从中受益匪浅。通过阅读《C++编程规范:101条规则、准则与最佳实践》,可以找到以下问题的答案哪些东西值得标?准化?哪些东西不值得标准化?使代码可扩展的最佳方法是什么?合理的错误处理策略有哪些要素?如何(和为什么要)避免不必要的初始化、循环依赖和定义依赖?何时应该(以及如何)同时使用静态和动态的多态性?如何实践“安全的”改写?何可时该提供不会失败的交换?为什么要阻止异常跨越模块边界传播7如何阻止?为什么不应该在头文件中写名字空问声明或指令?为什么应该使用STL vector和string代替数组?如何选择正确的STL搜索算法?为了保证代码的类型安全,应该遵从哪些规则?C++界20年集大成之作两位世界顶级专家联袂巨献适合所有层次C++程序员

图书封面

图书标签Tags

广告

下载页面


C++编程规范 PDF格式下载



很不错的书,对规范程序员的编程习惯大有益处。


本来以为自己早就是老油条拉,看了这本书还是感觉收获很大,尤其是C++的一些不常用的机制,这本书结合编程习惯也给出了非常生动地解释。我认为每一个有责任的C++程序员都应该仔细阅读本书,一定会因此而显著提升自己的编程能力的。


书中大部分建议都是非常好的。应该是作为日后开发过程中需要遵循的准则了


值得各层次的程序员收藏,内容实用,讲解清晰


C++编程规范,有助于养成良好的编程习惯


这是一本对于C++程序员来说非常值得一看的图书。


刚刚拿到这本书。首先网站客服的服务态度没的说!!!其次快递也很快。拿到书以后,书的质量很好,呵呵,最没用的一点。但是仔细翻开书看了几页,真的是那种实践中磨练出的一点一滴的精华。极度推荐!!!


介绍很多地方都是平时没注意的,对提高编程水平很有帮助


从第0条开始。粗粗翻看了一下。非常值得C&C++团队的共同学习!


对于C++开发精益求精的话,还是推荐看一下的,毕竟都是C++的大咖们的建议,这样可以指导我们写出更加优美的C++程序。


正在看书中,不错好书。。。


经典图书,慢慢看,要想成为一个高手,必须认真学的书之一


内容还没看,书不错~


很好的书。推荐


别人推荐的书,补充知识!


听说是经典就买了,然后还没看!


c++ 经典图书,看看作者就知道了


我是在网上看过电子版的后感觉很有价值,很值得细细捉摸学习才买下来的!很不错!!!


东西好,速度快,下次继续


很实用,看完比较有收获


质量上挺满意的,但是物流稍微有点慢,不过也不是急着用


送货很快送货很快送货很快送货很快


初学者看不懂的,内容深奥,高手专用。


不错,很不错,看了很喜欢,还没看完~~~


本书列举了101条C++编程规范,大部分是初学者也能看懂的,很适合在入门阶段就养成良好的编程习惯。剩下一小部分,需要初学者在接下来的时日里,自己先将C++的一些高级特性以及软件的相关思想学习后,再参照本书所述
自己非常喜欢^^


第0条翻译成“不要在意这些细节”更潮一点。书很薄内却不少,就当消遣用吧。上厕所必备书籍。


适合刚工作要养成习惯的人,介绍很到位,建议配合c++ effective一起看


内容是看不懂,帮朋友买的。不过书的质量还是不错的。


书上整体还不错,值得好好学习,就是有点小贵,呵呵


写的太多的理论,例子太少。不过,得有点基础才能看的懂


还没细看。初看内容一般,建议大家还是买《Effective C++》


都说是不错的好书,等着精读。


哈哈,质量不错,送货很快


初步浏览一下,还没认真读。


感觉不错,值得阅读


学学挺不错


书较一般,作为一个程序员,需要注意的规范或者说潜规则要比这里讲得多得多,。。。


比较适合已经工作的编程序人员


规则是有用的


著作是好著作,就是翻译的优点蹉,很多地方是生硬翻译,看起来很不舒服……


虽然里面有一页有褶皱


收藏,有时间看看


书中列举了C++开发的注意事项,值得一看


图灵程序设计系列图书 经典 强烈推荐!


里面内容简短精炼,浅显易懂,很不错。


书质量挺好的,是正品


Sutter的书,确实很实用,出发点多是从c++标准,而不是从某一些编译器。对开发可移植的代码很有好处


给朋友买的,所以不太清楚


很多东西十分值得细看。很多东西是经验积累才能得出的。


帮同学买的,他说不错,适合有一定水平的人看


概述简介,语言通俗易懂,详细介绍了编写程序的各种规范和要注意的地方。主要是其内容高度集中,简要明白。


能让你理解C++中那些稍微深层次的技术,以及技术背后的设计理念


对于提高C++ 水平写出标准的规范的代码有着不错的作用


很好的一本书。适合有一定基础的C++读者使用。书的质量非常好,绝对正版。以后买书必到到卓越,理由有四:一是价格优惠。买书价格绝对是王道。二是质量过硬。绝对不会出现盗版书。三是服务周到。快递很给力。一般第二天就能到。另外,全场货到付款,可以刷pos机,很爽。让你见到东西再付款,买的放心,符合大众心理,没有过硬的质量是绝对不敢这样做的。


为什么要10个字以上?够了吗。书不错,对卓越的退换货制度很满意。


有经验的书籍


好书买国外作者


规范写的不错


还没看,薄薄的一小本


c++经典书籍


讲经验的书


相关图书