对C++编程语言的思考

从大学大二开始接触C++,大学毕业后一直在使用C++,我一直坚信C++是一门非常优秀的编程语言。

随着对其的深入了解和长期使用,不断反思总结,但我同时认为其还是一门比较糟糕的编程语言,这从近几年编程语言排行榜就能看出一些端倪。

庞然大物

从C++98到03,到11,到14,再到17,20。近10年其更新频率终于让人有种现代编程语言的感觉了。

但是即便近几个版本试图简化语法,统一功能特性,极大的提高开发效率。但是这些让人更加的迷惑:我到底该用谁?

它有:

  • STL
  • 模板(元编程)
  • 指针和引用
  • 内存管理
  • 面向对象编程(难以掌握的virtual)
  • 面向过程编程
  • 难以理解的内存模型和布局
  • 庞大的标准库

沉重的历史包袱

正如其名,C++是C的扩展,至少这是最初为了加入面向对象编程范式时的初衷。这注定了其对C的兼容,所以C++经常被称为C/C++。C本身是很精小的,然而,兼容C后,为了尽可能的减少C的一些不安全的作为,C++增加了很多对应的功能特性(典型的就是引用,从左值引用到右值引用,再到万能引用)。我们发现,在规避问题的同时,也在极大的增加复杂度。

而C和C++之间还有同步进化的特征:C升级了,C++也会对应的将这些C升级的内容兼容;C++升级的新特性,C也选择性的加入。这就导致兼容出现了一个螺旋循环的情况。这更加恶化了C++的特性。

而这些历史包袱导致一个特别糟糕的编码习惯:用C++写C,或者用C写C++!这个在C++98时代非常明显。

但是这个包袱,甩不掉!这是C++从基因里就带来的。D语言可能做到了,但是D实在太不为人所知了。

难以理解的多态和内存布局

// TODO

指针和引用的误导

// TODO

滞后的标准库

// TODO

糟糕的模板技术体验

你有没有遇到过一个模板调用出现多达几百行编译错误的情况?这是最为诟病的体验!

框架或者基础库支持弱

// TODO

高成本的学习曲线

编程语言

C++11及后续版本都尝试统一并简化特性,结果导致C++倒成了一门“新”的编程语言。如果仅仅是学习这些新版本,倒是件容易的事情。

但是你必须学习旧版本的内容。所以学习的功能特性非常之多,且前后存在冲突的细节。

库和框架

STL:标准库的内容之一,必学。

Boost:准标准库,没办法,必须学。

多线程库:C++11开始,有了标准库,但是功能还需加强。另外其他平台的多线程库特别是Pthread,这是必须掌握的。

网络库:这个看情况了,用谁学谁。但是socket是必须的。

文件系统:C++14开始增加了文件系统标准库,但是还需加强。所以取决于你的版本。其他的看情况了。

框架库:业内没有标准,行业以及领域不同使用的也不同,而不像Java那样。

所以C++语言上层学习的东西非常多,且难度很大,因为与语言版本和平台相关。

指针和引用

这是特意独立出来,因为C++基础最难使用且最容易出问题的地方就是这里了。从C++11开始,有了智能指针(准确说是从03开始的)和右值语义,所以学习和使用起来更困难。

posted @ 2020-07-03 21:02  Chorulex  阅读(177)  评论(0编辑  收藏  举报