​C++之父给C++程序员的1047条建议(文末送书)

共 3636字,需浏览 8分钟

 ·

2021-08-16 04:21

1979C++诞生的那一天起,C++之父Bjarne Stroustrup就一直致力于C++的标准制定、语言设计与实现、教学和研究等相关的工作,硕果累累,为C++的发展和应用做出了杰出的贡献。


Stroustrup不仅仅是在C++方面取得了不菲的成就,在其他很多方面都颇有建树。为了向Stroustrup致敬,我们来看看他亮眼的履历。



图 C++之父Bjarne Stroustrup


Bjarne Stroustrup介绍


C++语言之父:C++的设计者和最初实现者,C++语言ISO标准的维护者。

科学界明星人物曾获《财富》杂志“美国12位最年轻的科学家”称号,以及BYTE杂志“近20年来计算机工业最具影响力的20人”称号。

学术造诣极高美国工程院院士、IEEE会士、ACM会士,曾获Sigma Xi(科学研究协会)的William Procter奖(首位获得此奖的计算机科学家)。


教育贡献重大:曾担任德州农工大学首席教授,为剑桥大学、哥伦比亚大学、普林斯顿大学等知名学府教育事业做出重要贡献。


企业界担任要职:现任摩根士丹利技术与数据部门董事总经理,RollApp科技公司资深顾问。

著作颇丰:

  • The Design and Evolution of C++(《C++的设计与演化》)

  • A Tour of C++(《C++语言导学》,更新至第2版)

  • The C++ Programming Language(《C++程序设计语言》,更新至第4版)

  • Programming: Principles andPractice Using C++(《C++程序设计:原理与实践》,更新至第2版)

 

为了帮助程序员更好地学习和使用C++,Stroustrup创建了一个内容丰富的C++元宇宙《C++之父创建的C++元宇宙》。其中,这个元宇宙中包含1047条C++编程的最佳实践,全部都是从C++语言设计者的视角和大量工程实践中总结出来的宝贵经验,可谓字字珠玑。


这些最佳实践都悉数总结在Stroustrup的3部享誉全球的著作里,由于数量比较多,本文无法全部呈现,只能展示部分,想要领会语言之父思想和经验的读者,可以沿着下面的路线找到全部的1047条最佳实践。


1.《C++程序设计语言(原书第4版)》:698条

这里随机展示10条:

建议1:请关注编程技术,而非语言特性。

建议2:设计应该关注优雅且高效的抽象,可能的情况下以库的形式呈现。

建议3:当接口和实现需要完全分离时,请使用抽象类作为接口。

建议4:如果你不确定是否会越界,请记得使用带边界检查的容器。

建议5:尽量使用普通char,而非signed char或unsigned char。

建议6:让表示所有权的指针位于句柄类的内部。

建议7:当不得不使用显式类型转换时,请尽量使用命名的转换。

建议8:与函数指针相比,请优先使用函数对象(包括lambda)和虚函数。

建议9:仅在确实需要时才使用protected成员,且务必小心使用。

建议10:模板可以用来构成类型安全且紧凑的数据结构,以及用来线性化类层次。


2.《C++程序设计设计:原理与实践(原书第2版)》:27条

这里随机展示3条:

建议11:请不要低估类型安全的重要性。类型是大多数正确程序的核心概念,大多数用于构建程序的有效技术依赖于类型的设计与使用。

建议12:输入和输出是很难处理的,所以我们必须预计到输入输出中所面临的一定程度上的混乱,并接受它和适应它。

建议13:当设计一个类时,我们必须考虑类的初始化、拷贝与析构。

3.《C++语言导学(原书第2版)》:322条

这里随机展示12条:

建议14:理解C++语言的原语是如何映射到硬件的。

建议15:避免使用裸union,将其与类型域封装在一个类中。

建议16:如果你的函数不抛出异常,那么将其声明成noexcept。

建议17:如果成员函数不改变其对象的状态,将其生命为const。

建议18:如果某个类是一个资源句柄,则它需要一个用户自定义的构造函数、析构函数和非默认的拷贝操作。

建议19:不能将虚函数成员定义成模板成员函数。

建议20:如果你需要一个简单函数对象且只用在一个地方,则使用lambda。

建议21:不要重新发明轮子,应该使用库;当有多种库可选择时,优先选择标准库。

建议22:将regex用于正则表达式的大部分常规用途。

建议23:在使用一个文件流之前,记得检查它是否依附于某个文件上。

建议24:如果要在大量数据中执行搜索操作,请选择无序容器。

建议25:与垃圾回收机制相比,请优先选择智能指针。

 

不管你现阶段的C++功底如何,应该或多或少都能感受这些最佳实践的价值。用“字字珠玑”来形容,一点也不夸张,有的是只有只有站在C++语言设计者才能明白的,有的可能是要踩了无数坑并付出一定的代价后才能明白的。


如果能将这1047条最佳实践吃透并灵活运用,不敢说你从此在C++领域可以封神(Stroustrup才是yyds),但绝对可以称得上是高手。

 

要学好C++,最重要的是编程实践,一定要编写和阅读有一定复杂度的工程化代码,而不是Demo或玩具代码。提到实践,上面提到的C++之父的这3本书也会给你惊喜,因为书中有2000-3000个代码示例,这些代码示例都是工程代码简化而来的,同时这3本书中还有1000多道习题。


如果你想跟着C++之父学习最正统的C++,想了解C++的最新动态,想学习的过程事半功倍,推荐你了解C++之父构建的C++元宇宙。




RECOMMEND

推荐阅读
01

《C++程序设计语言(原书第4版)》  

  

作者:(美)本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup)

译者:王刚杨巨峰

C++之父作品,40余年长销不衰,被翻译为20余种语言,

世界名校教材,数百万程序员学习C++的推崇之作



推荐理由

本书是在C++语言和程序设计领域具有深远影响、畅销不衰的经典著作,由C++语言的设计者和最初的实现者Bjarne Stroustrup编写,对C++语言进行了最全面、最权威的论述,覆盖标准C++以及由C++所支持的关键编程技术和设计技术。本书英文原版一经面世,即引起业内人士的高度评价和热烈欢迎,先后被翻译成德、希、匈、西、荷、法、日、俄、中、韩等近20种语言,数以百万计的程序员从中获益,是无可取代的C++经典力作。



02

《C++程序设计:原理与实践(原书第2版)》


作者:[美] 本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup)

译者:任明明王刚李忠伟刘晓光

C++之父作品,畅销全球10余年,

被翻译为20余种语言,1182道习题,

C++程序员从匠人到艺术家必读之作



推荐理由

将经典程序设计思想与C++开发实践完美结合,全面地介绍了程序设计基本原理,包括基本概念、设计和编程技术、语言特性以及标准库等,教你学会如何编写具有输入、输出、计算以及简单图形显示等功能的程序。此外,本书通过对C++思想和历史的讨论、对经典实例(如矩阵运算、文本处理、测试以及嵌入式系统程序设计)的展示,以及对C语言的简单描述,为你呈现了一幅程序设计的全景图。



03

《C++语言导学(原书第2版)》


作者:[美]本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup)

译者:王刚

C++之父作品,畅销全球近10年,322条编程建议,

可帮助有经验的程序员3小时了解C++语言全貌和设计思想



推荐阅读

在本书中,C++的创造者本贾尼•斯特劳斯特鲁普描述了现代C++语言的构成。这本简洁、自成体系的导引书籍包含了C++语言大多数主要特性和标准库组件。本书通过介绍编程风格(例如面向对象编程和泛型编程)引出支持它们的C++特性。从基本特性开始,延伸到更宽范的进阶主题,包括很多C++17新特性,例如移动语义、一致初始化、lambda表达式、改进的容器、随机数以及并发。本书非常全面,甚至包含一些为C++20提出的扩展,例如概念和模块。本书最后讨论了C++语言的设计和演化。


最后
如何送书



在这篇文章下方留言 + 这篇文章的点赞在看,我会选取留言点赞量最高的 5 位同学,送出这 5 本书的任意一本(中奖小伙伴自己选),《C++程序设计:原理与实践(原书第2版)》与《C++程序设计语言(原书第4版),请获奖粉丝备注选取的是基础篇or进阶篇,1-3部分或第4部分。截止时间至 8 月 14 日晚 8 点。


当然,各位读者朋友们你也可以在当当或者京东上自行购买到这几本书

同时也欢迎各位加我微信,拉你进微信学习交流群。也给公众号加一个星标。

浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报