看过编程语言排行榜的人都知道,从2002年开始,无论时代如何发展,c/c++的排名都在前五之内,可见其在编程语言界的地位。编程界流行一句话:c几乎无所不能,c++几乎无所不能,可见其强大的功能。大家都知道c++是完全兼容c的,c++是c语言的增强版。如果你没有学过c语言或者先学过的其他语言,比如c#,你会觉得学c++非常吃力。那么c++比其他语言难在哪里呢?1、C++历史包袱太多。C++是20世纪80年代的发明。它比较旧。在长期的发展中,存在着很多历史遗留问题。在解决某个问题时,选择太多,为了兼容以前的代码和以前的规范,整个系统不得不复杂庞大。2.C++没有单一的大所有者。我们知道很多语言背后都有一个团队,比如微软的c#,甲骨文的java,谷歌的go。放眼c++,它不属于任何一个团队,也没有一个独特的团队。编译器开发者,微软的msvc,linux的g++,还有clang等等,厂商多如牛毛,谁独大,谁听谁的。最终只能建立一个C++标准协会。每个人都在谈判,相互妥协,这种相互妥协让c++变得极其复杂,兼容这个兼容那个,至今没有公认的严格的c++规范,c++很自由,自由也意味着困难三巨头,c++没有完美的自动化垃圾回收机制。提到c/c++,大家最先想到的可能是指针。指针是c/c++的精髓,也是难点的来源之一。Java、Python等很多编程语言都没有Pointer,因为它们的虚拟机或者解释器有自己的垃圾回收机制,程序员根本不用担心内存回收,而c/c++需要回收使用请求的内存空间后。最常见的问题是忘记如果没有回收或者正在引用其他变量,会提前回收。在有垃圾回收的语言中,程序员根本不需要担心这些事情。他们不需要知道内存是如何分配的,应该由谁回收以及如何回收。自动垃圾收集是有益的。有缺点。优点是对开发者简单,缺点是运行效率比较低。C/C++以牺牲简单性为代价注重运行效率。4、C++语法博大精深。上面说了这么多,重点是说背后的原因。具体来说,C++的难点在哪里?与Java、C#、Python、PHP、JavaScript、Go、C、R、scala、F#相比,就纯语法而言,与C++的难度不在一个档次,说C++简单的,大概只有毕业几年,只玩过C++,对其他语言一窍不通,比如复杂的const和static语义,指针操作,地址操作,模板,多态,构造函数,继承等等。5.第三方不多libraries相对来说,C++提倡造轮子。没有太多的第三方库。很多看似简单的功能,非得自己实现或者拼命找库。一般来说,C++的使用时间长了,如果熟悉了,就会比较好掌握,因为可以不断积累库函数。没有一种语言是绝对好或坏的,每种语言都有自己的优点和缺点。C++是一种非常灵活的语言,具有编写高性能代码的能力,几乎涵盖了我们能想到的所有领域。包括航空航天、半导体、设备驱动等等。除了性能优势,C++也很稳定,20年前的代码今天还能用。
