在开发人员的圈子里面,通常有这样一句调侃的话:其他编程语言的开发者都是需要仰着头看 C++ 开发者的。
C++,在大多数开发人员的眼里,是一种非常难懂难学且容易出错的语言,但是一旦学成,其妙无穷,如侠士行走江湖,内功心法在身,无往不胜。
作为一门多范式的通用编程语言,既支持传统的面向对象编程,也支持模板元编程模式。在现代计算机信息领域,它是大多数上层技术的基础和支撑。
当然,除了作为基础技术支撑以外,在小到嵌入式、PC软件开发、游戏服务器,大到大型金融系统、高性能高并发计算应用、分布式服务器,到处都有 C++ 的身影,即使在现在火热的人工智能和机器学习,外衣是 Python(模型描述),其内核仍然还是 C++(高性能运算) 。
此外,中国几乎所有大学计算机专业都会开设 C/C++ 课程,那些注重对学生基础能力培养的院校会建议把 C/C++ 作为学生初入编程的第一门语言,为什么 C++ 会受到这么大的关注呢?我总结了 3 点它的核心竞争力:
1.性能:虽然完成同样的功能,C++ 需要的代码行数可能比其他语言要多一些,但性能方面比其他语言一般要快,这点在大型应用系统上差别更大。
2.计算机资源利用率:不管是移动设备,还是服务器,由于 C++ 语言更接近操作系统,大大减少了中间层的消耗,因此硬件资源利用率更多的应用于我们的应用本身。
3.对原理性的理解:C++ 这门语言本身要使用各种操作系统 API 构建应用,对开发者的要求比较高,需要开发者深入理解操作系统的原理等等,而这些原理不随着开发者改变开发语言、平台变化而变化,可以说一经学成,终身受用。
然而,C++ 也是出了名的复杂、难学、难用。
当然,这也不完全是一件坏事,这样一来,熟练的 C++ 程序员也就自然而然获得了“水平很高,薪资很高”的名声。
C++ 之所以难学主要原因是, C++ 是离操作系统较近的编程语言,其语言本身自带的“功能完备性”不够,大多数功能必须是直接调用操作系统的 API 才能完成,而操作系统自身的保护机制会让非法的程序崩掉退出,这就要求了用好 C++ 必须对相关的操作系统原理(如多线程、网络编程等)有深入的理解。
读者一定听说过,C++ 程序可以直接操作内存,稍有不当,程序就会崩溃。
再例如,对于磁盘上文件的操作,C++ 需要调用操作系统的文件相关 API,而像 Java、Python 等其他语言,其自带语言的 sdk 往往直接封装了这样的功能。
不过,这些语言其实也是直接或间接对操作系统文件相关 API 的封装。
从这一点来说,同样的功能,C++ 程序有更高的效率。
再者,C++ 不仅支持面向对象编程模式也支持模板元编程,这就导致 C++ 编程的开发模式千差万别。
在硬件条件越来越不是主要问题的今天,C++ 标准委员会也意识到 C++ 语言“功能完备性”的问题,于是新的 C++11/14/17 标准,大量借鉴其他语言功能和特性上,除了移除了一些无用的特性,更是增加了大量方便易用的特性,大幅度提高了 C++ 开发者的开发效率。
以至于被称之为 “Modern C++”。
但是新的语言标准一经发布,让很多开发者觉得不适应,因为新语言标准似乎让 C++ 变成了另外一门编程语言。
新规范语法、右值引用、智能指针、新的线程库、线程同步原语、结构化绑定、stl容器的增强等等,让 C++ 这门已经有 40 岁的语言重新焕发光彩。
然而,实际开发中,很多开发者和开发团队对这些新功能望而生畏。
难理解和以为学习成本非常高,是常见的误解。
今天给读者介绍的课程将帮助读者消除这些误解,让我们欢迎吴咏炜老师以及他的专栏《现代 C++ 实战30讲》。
吴咏炜老师是深耕 C++ 30 年的老程序员,前 Intel 资深软件架构师,见证了 C++ 这么多年来的发展历程。
他 1995 年毕业于复旦大学,从事软件开发工作 20 多年,历任开发工程师、项目经理、开发经理、架构师等
职务。
他热爱软件技术,热爱 C++,热爱开源;
对于精炼、易于维护的代码追求不懈,是《编程大师访谈录》一书的翻译者之一,开源项目 libunibreak 的作者。
学习本专栏需要什么基础?
本专栏分为以下四大部分:
基础篇,讲解现代 C++ 中的最重要特性,帮助你理解基础概念;
提高篇,讲述几个独立的专题,帮助你掌握 C++ 中的一些高级技巧;
实战篇,则讨论实际的工具和第三方库,帮助你打磨手头的兵器库;
未来篇,讨论 C++20 中即将引入的一些新特性,帮助你培养前瞻性。
希望大家留意的是,学习本专栏需要满足下面这些条件:
1. 适宜人群:具有 1~5 年工作经验的 C++ 程序员,熟悉基本编程概念和 C++ 的基本语法,包括指针、引用、异常、递归、class 等(不要求熟悉 C++11),有意愿了解更深入的 C++ 知识。
2. 不适宜人群:完全没学过 C++ 的人(本专栏非 0 基础课程)。
3. 专栏中的内容大部分时间都会使用不超过 C++17 标准的语言特性,最后在讲到 C++20 新特性时,某些实验功能可能会要求某个特定的编译器,更多细节请参见[课前必读]。
4. 由于专栏涉及到的都是较短的代码,故作者不会提供工程文件,建议你熟悉编译器的命令行,来快速编译代码。
特别说明:专栏中案例+代码偏多,不建议仅通过音频学习,“文稿+音频+动手实践”为最佳学习方式。一些语法和规则细节,部分也会在文末提供参考资料。
在这个这个专栏中,他会重点讲 Modern C++ 的新特性是什么和为什么,而不是单纯的语法细节,让学习者知道某项技术产生的原因和实际应用场景,做到知其然和知其所以然。
以下是这个课程的大纲,全课程分为四大篇:
基础篇 讲解现代 C++ 中的最重要特性,帮助你理解基础概念;
提高篇 讲述几个独立的专题,帮助你掌握 C++ 中的一些高级技巧;
实战篇 讨论实际的工具和第三方库,帮助你打磨手头的兵器库;
未来篇 讨论 C++20 中即将引入的一些新特性,帮助你培养前瞻性。
如果读者在学习了本专栏之后,能够知道某个 C++ 的功能为什么存在和应该在什么情况下使用,能把 C++ 当作一种实用的语言,能用它写出抽象但自然的代码,能对现代 C++这一熟悉而又陌生的语言有一个新的理解,能用它去更好地解决项目中的实际问题。
我始终相信,静下心来好好学习 C++,会让你受益终生,也会让你的编程之路走得更远。
1、早鸟价 ¥68,原价 ¥99。结算时,输入优惠口令「CPLUSPLUS」再减 5 元,到手价 ¥63,口令仅限「前 200 人」有效。
2、订阅后生成海报分享给朋友,每成功邀请一位好友,可获得 ¥24 返现,多邀多得,上不封顶。
点击【阅读原文】免费试读,
输入优惠口令
「
CPLUSPLUS
」
,
再减 5 元,到手价
¥63,
口令仅限
「前 200 人」
有效。