为什么不推荐C++?

举报
实力程序员 发表于 2021/06/02 10:55:02 2021/06/02
【摘要】 为什么不推荐C++?C++是一门强大的语言,已经得到了广泛的应用。C++开创了面向对象编程(Object Oriented Programming, 简称OOP)的时代。想当初,抱着一本厚厚的C++书,啃了好几个月,总算把C++的各种概念都看了一遍。时至今日,C++版本号已经从11,14,17升级到20,后面C++ 23 预计很快推出。每个版本,都带来众多的强大特性。因此,强大、复杂,是C+...

为什么不推荐C++?

C++是一门强大的语言,已经得到了广泛的应用。C++开创了面向对象编程(Object Oriented Programming, 简称OOP)的时代。
想当初,抱着一本厚厚的C++书,啃了好几个月,总算把C++的各种概念都看了一遍。时至今日,C++版本号已经从11,14,17升级到20,后面C++ 23 预计很快推出。每个版本,都带来众多的强大特性。

因此,强大、复杂,是C++最鲜明的特点。

但是,国外很多大牛,都对C++持否定态度,最著名的就是Linus Torvalds了,他说:
C++ is a horrible language… C++ leads to really really bad design choices… 
翻译成中文:C++是一门可怕的语言… C++的设计哲学是非常差的。

面向对象的思想和工程实践已经持续了30多年,从最初对C++的狂热追捧到日趋理性,人们开始反思:C++带来的好处多,还是副作用更多?

我本人,深入学习过C++,并且领导和参与过多个大型的C++项目。从自己的体会出发,我是强烈不推荐大家学习C++的!

最初,C、C++、Java三足鼎立的时候,绝大多数从事后端系统开发的人员,基本都会首选C++,原因在于:
1)Java性能差,不能手动管理内存,因此首先就被排除了;
2)C++是开箱即用的,C++ 语言本身就自带了各种数据结构和算法,如Vector、List、Map等;
3)C++的第三方Library众多,如大名鼎鼎的Boost,ACE等。

而C语言不是开箱即用的,就连个基本的链表都得自己写。因此,对于新手来讲,肯定一下子就投入到C++的阵营中了。

但是,由于C++过于复杂,真正能深入掌握C++,在产品研发中能正确发挥C++的优势,并规避C++的弊端,这样的C++高手寥寥无几。
最终,大量C++项目都充斥着低质量的代码,代码体量巨大,复杂度极高,阅读极烧脑,维护极困难。

从C++语言的设计哲学来看,其核心思想要素有三个:继承、多态、封装。
大量程序员对C++的继承和多态非常重视,对封装的重视程度就差远了。实际上C++的创始人,他的本意是要强调封装!

从大量的工程实践来看,继承是万恶之源!尤其C++还支持多重继承!
只所以这么说,是因为当你看到 int i = objA.f1(k); 时,你根本不知道f1() 是哪个类提供的。可能是父类,也可能是祖父类,还可能是祖祖父类。大型项目中类继承的层次很深,并且还有大量的多重继承。因此,你很难搞清楚,这个语句到底调用的是哪个类的哪个方法。
就连最基本的 ClassK *pk = new ClassK(); 这个语句,如果ClassK上面有5层父类,并且每个父类的成员变量还是类,搞清楚new ClassK() 究竟做了哪些动作,就足够让你烧脑了!

继承已经够复杂了。再用重载虚函数方式来实现多态,就使得问题更加复杂化。pk->f2(), 你很难知道到底调用的是谁?就算最基本的new,可能也是被重载过的操作符!

因此,同样的语句写法,对于不同的类,就是完全不同的代码逻辑。这在一个大型的项目中,多人协作,项目中间人员还可能不断变更,这种代码怎么能维护下去?

大型软件工程,需要的是一致性和确定性。同一种写法的语句,只能有一种确定的含义,这样团队成员才能无障碍地交流和协作,开发速度和软件质量才能得到保障。

另外,C++为了解决内存释放的问题,引入了智能指针,这使得代码的复杂度急剧上升。内存反复传递和move,你很难搞明白内存最终在哪里被释放的。

为了解决业务问题,真的需要写这么复杂的代码吗?

如果不用继承,就不能实现这个业务需求吗?

其实,不用继承,也是能实现同样的业务需求的。Go语言本身就不支持继承,同样实现了系统级编程,催生了大量的优秀产品。

大量使用C++的程序员,由于不能正确发挥C++的优势,不能规避C++的劣势,结果写出了数量巨大、臃肿、复杂的代码,难于理解,难以维护。

珍爱生命,请远离C++!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。