海南编程课堂:揭秘C++成为全球最复杂语言的原因

发表时间: 2024-03-29 10:35

大家可能听说过这样一句话:C++是全世界最难的编程语言。

知乎上流传着一段C++经典语录:

也有人说C++学着学着就放弃了,这是真的吗?为什么会这么说呢?它难在哪里?有什么特点呢?今天海南码上去学带着大家一起来探讨这个问题。

首先,“C++是全世界最难的编程语言”这句话对还是不对呢?

对此我的回答是:

在高级语言里C++确实有一定的难度,但并不能说明它就是世界上最难的编程语言,如果你用汇编去写代码说不定会更难,更何况C++的难度也并不是不能攻克的。

为了了解它的难度,我们下面将C++与C语言和Java语言进行一个对比。

C语言:语法相对简单纯粹,其中的基本数据类型、数组、运算符、函数、结构体、指针等概念在很多语言里都有基本语法。其中难度较大的就是指针了,因为它的变化比较多,相对较麻烦,其难点就在于它可以直接操纵内存,导致很容易出现bug,但它的语法支点要纯粹一些。

Java语言:纯粹的面向对象的语言(这是一种编程思想,后面我们会讲),运行在虚拟机上,不用考虑内存。

C++语言:语法细节繁多,需要掌握STL(标准模板库),需要自己管理内存,编程范式比较多。

01、桌面开发语法细节繁多

C++的基础语法不仅将C语言中的语法知识点全部集成过来,还有:

(1)C++不仅有指针,还有引用;(2)C++不仅有struct,还有class,并对struct功能做提升;(3)四种强转;(4)函数重载;(5)默认参数;(6)内联函数;(7)异常处理;(8)命名空间等.....

C++比C语言多了很多很多比较细小的语法知识点,所以会造成大家“C++学起来比较麻烦”的感觉,但这只是一些语法特性,掌握了一定的学习方法之后就可以熟练运用C++。

从另一个角度而言,语法细节越多,提供的功能越多,那么可以解决的问题也就越多,这也证明了C++的灵活性与实用性。

02、桌面开发标准模板库STL

C++里面有一个库,简称STL,叫做标准模板库。这个标准模板库里面有六大组件:容器、迭代器、算法、适配器、函数对象、空间配置器。

我们不仅要学会这六大组件的基本使用,还要去读源码。因为基本使用只代表会用,一旦出现了问题、出现了bug你是无法解决的,但是如果你读懂了源码,看懂别人是怎么实现的,那基本就能解决这些问题。

源码也跟我们上文提到的Linux内核驱动开发一样属于要修炼的内功。一些接触过很多语言比如C语言、Python、Java的同学往往只停留于表面,想要真正运用到这门语言的特性就必须要去读源码。

我们可以通过读源码看到高手是怎样写代码的,同时从别人的代码中得到一些启示并运用到自己的代码中去,最终提升自己的代码功底。

03、编程范式比较多

常规的四大编程范式有面向过程编程、面向对象编程、泛型编程、函数式编程,但除此之外,C++实际上还有更多编程范式。

其中面向对象编程,我们前面说过C++是一种面向对象的语言,而面向对象的语言会有对应的四大基本特征:抽象、封装、继承、多态。其中的几个难点有:

(1)拷贝构造函数、赋值运算符函数的原理与实现比较麻烦,细节非常多。

(2)多继承、菱形继承、虚拟继承比较麻烦。

(3)多态的原理、使用、内存布局形式。

04、需要自己管理内存

如果大家之前完全没有接触过C++或编程语言的话,那么可能对于内存的概念不太理解,简单来说就是你去写一段代码,这个代码写完之后的这些数据是要放到我们的内存里面去的,就跟你出远门要搭乘相对的交通工具一样,这个内存对写代码的人而言就是一种非常重要的“交通工具”。

C++要求对内存进行人工的管理,虽然带来了不少麻烦和困难,但人工管理也有人工管理的好处。如果全部都是由机器做的,程序员不能掌控,就无法将自己的能力体现出来也不等你进行更好的管理,不仅丧失了自由度还丧失了可能性。

除了以上我们提到的有关于C++的难点之外,它从2011年以后开始每三年会更新一次标准:C++11、14、17、20、23(后面的数字代表11年、14年、17年),每次的标准更新都会带来很多的语法特性。

但实际上我们单纯的去写一部分C++代码的时候可能用不到这么多特性,当你真正要使用这些特性的时候再去学习也是可以的。

不过正是因为C++具有一定程度的难度,一旦学好之后我们的内功能进一步修炼得比较深厚,我们的自由度会更高,写出来的东西也会更优秀,那么在这个社会上、在这个行业中你就能够屹立不倒,这也是我们推荐有能力的同学去学习C++的原因之一。

以上就是本次分享的全部内容,想学习更多编程技巧,欢迎持续关注海南码上去学!