这是最近一周时间几个读者小伙伴所提的问题,我顺手截了两个图。git
实不相瞒,这类问题以前也常常看到,可是我忘了截图了。github
每次遇到这种问题,看起来很简单,可是打字一时半会还真说不清,想一想今天周末了,写一篇文章来统一聊聊吧,若是小伙伴们有不一样见解,也欢迎批评指正,评论区见。面试
注:本文在开源项目:https://github.com/hansonwang99/JavaCollection 中已收录,里面包含不一样方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中...编程
”
C
和C++
究竟是什么关系?首先C++
和C
语言原本就是两种不一样的编程语言,但C++
确实是对C
语言的扩充和延伸,而且对C
语言提供后向兼容的能力。对于有些人说的C++
彻底就包含了C
语言的说法仍是有点别扭的。框架
C++
一开始被本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)发明时,起初被称为“C with Classes”
,即「带类的C
」。很明显它是在C
语言的基础上扩充了类class等面向对象的特性和机制。可是后来通过一步步修订和不少次演变(以下图所示),最终才造成了现现在这个支持一系列重大特性的庞大编程语言。编程语言
就像经典书籍《Effective C++》一开头就说的,现现在咱们提到C++
,都应该视其为一个庞大的「语言联邦」,最起码包含以下几个重要的组成部分:ide
这其中的第一部分「面向过程编程」,正是C++
提供的向后兼容C
语言的部分,因此你能看到市面上在售的大部分讲C++
编程的书,一开始前几个章节基本都是在讲「面向过程编程」的内容,包括但不限于:数据类型、变量、运算符、表达式、语句、判断、循环、函数、指针等等这些内容。函数式编程
C
语言能直接学C++
吗?仍是像前面所说,C++
编程语言的第一大重要组成部分就是「面向过程编程」,而这正是C
语言老大哥的领域。即便没有学过C语言,一上来就直接学习C++
的小伙伴,应该也难逃『面向过程』这一部分的内容。由于市面上在售的大部分讲C++
编程的书,开始的章节都在讲「面向过程编程」的内容。函数
从理论上来讲,学C++
前并不必定非得学C
语言,可是有C
语言底子再去学C++
每每更具优点,最起码「面向过程编程」这一部份内容可以轻车熟路。性能
可是遗憾的是,即便是《C++ Primer》这种700
多页厚的权威C++
书籍,开头也只有不多一部分在讲「面向过程编程」,因此对于面向过程这一部分的讲述是确定没有专门讲C
语言的书籍剖析得细致和全面的,否则也不会有侧重讲指针相关的《C和指针》等这类书籍的出现了。
因此我的建议是在学C++
以前,C
语言的基础仍是尽可能要夯实,确定是有帮助的。
C
学得好的,学C++
是否更具优点?是的。
最起码学C++
时,里面的「面向过程」这一部份内容能够说轻车熟路了。
C++
能替代C
语言吗?既然C++
这么强大,包含这么多模块和范式,并且也几乎包含了C
语言面向过程这一部分的内容,那为啥还要学C
语言呢?都直接学习C++
它不香嘛?
是的,C++
很强大没错,但那些强大的范式和机制自己带来的包袱就不轻,也确实给学习者形成了不小的负担,甚至劝退了不少人。
而反观C
语言,C
语言自己就是一个把能力、性能、效率和学习成本权衡得很是极致的一种编程语言,以致于大学阶段必开的程序设计课程里基本都有C
语言的身影。
并且C
语言的应用领域极度普遍,上到操做系统底层的原生接口,下到普通的应用层开发,C
语言都有着不小的功劳。以致于这么多年来,在Tiobe
编程语言排行榜里,C
语言都是居高位不下。
并且2020
开年C语言重回巅峰王座,一举夺得「2019
年度编程语言」。虽然这只是一个看起来很无聊的排名,但多多少少能说明一些事情。
因此不管是过去,如今,甚至是将来,近50
岁的C
语言老将军依然永不为奴。
C++
这种面向对象的语言才适合大型项目吗?C++
的出现的确是为了更方便地开发大型应用程序,毕竟面向对象编程里的不少重要思想和机制都对大型项目和复杂系统所要求的项目工程化、代码复用性/扩展性/可维护性等提供了强大的支撑。
可是摆在眼前的事实告诉咱们,即使是C
语言,也照样能够构建出极其复杂的系统和软件。上到Linux
这种旷世伟大的操做系统内核,小到被各个公司重度依赖的Redis
、Nginx
等开源软件或框架,都是C
语言的表明做品。
因此有时候咱们不得不认可的是,你们所说的抽象能力更多的是看写这个程序的人,而并不是编程语言自己。
好啦,扯得有点多了,总结一下就是:
C
语言和C++
是两个不一样的编程语言,只不过内容上有必定的重叠;C
语言是一门很强大的编程语言,我以为有机会仍是要学一下;C
语言的基础,上手C++
也会更快;C++
和C
各有各的选用考虑和应用场景,并无谁更好一说,学不学看本身的兴趣和自身技术发展的考量最后聊一聊学习C
语言和C++
的书籍吧。
我的以为若是想系统学习这两门语言,最好仍是得看一下经典的书籍。
关于C
语言学习书籍,最最权威的固然是C
语言的发明者Dennis M. Ritchie
所著的《The C Programming Language》(它也有中文版的),除此以外《C Primer Plus》也很系统全面。《C和指针》也可看看。
关于C++
的学习书籍,最权威的当属C++
的发明者Bjarne Stroustrup
大佬所著的《The C++ Programming Language》,可是很明显这本书不适合初学者,更加适合的还得是《C++ Primer》,也很系统全面。至于再深刻能够继续阅读诸如《Effective C++》、《STL源码剖析》、《深度探索C++对象模型》等书籍。
这些书读完,成神之路即可由此开启。
本文在开源项目:https://github.com/hansonwang99/JavaCollection 中已收录,里面包含不一样方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中...
”
天天进步一点点慢一点才能更快
小伙伴们周末愉快!