zoukankan      html  css  js  c++  java
  • 对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开始的)和右值语义,所以学习和使用起来更困难。

  • 相关阅读:
    关于SharePoint 2010 Beta2的安装
    SharePoint 2010新体验10 文档评分
    SharePoint 2010 新体验3 文档集
    我在SharePoint 2010 Day上做的一个演示课程
    下载 SharePoint Server 2010 Public Beta (包含中文版)
    关于QuickPart的Q&A
    SharePoint服务器连接配置数据库的连接字符串保存在哪里?
    为SharePoint 2010创建Application Page
    Let's talk about SharePoint 2010
    SharePoint 2010 新体验8 内容类型集线器 (Content Type Hub)
  • 原文地址:https://www.cnblogs.com/chorulex/p/13232657.html
Copyright © 2011-2022 走看看