当前位置: 首页 > article >正文

【CPP11?】结合CPP发展历史来理解CPP11

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
    • 1.CPP的由来
      • 软件危机的来临
      • 应时代的面向对象编程
      • CPP的诞生
    • 2.CPP语言的发展历程
    • 3.启示


前言

由C到CPP的大概历史是如何的?CPP是一门怎样的语言?想必浏览本文将会对此有一些初步的认识,本文是结合历史来介绍CPP的发展历程的。
提示:在本文中,作者对相当内容都进行了概括,只是一个大体的过程,会与具体实际有出入


1.CPP的由来

软件危机的来临

20世纪80年代,由于个人计算机的发展以及图形化界面的开发,计算机需要大量软件开发,人们需求的不断增长,促使软件复杂化,软件开发进入“软件危机”。
主要表现在:
出现了大规模的软件,代码量巨大。 往往需要数百万行代码组成,数千计程序员参与其中,代码维护、可靠结构和维护这样一个大的“代码山”成为一个新的难题。
软件成本开发在计算机系统的总成本中比例居高不下,且逐渐增高。 由于硬件尤其是半导体电子管的发展,硬件成本在不断降低,然而对于软件开发,则需要投入大量的人力,软件成本随着软件规模和数量剧增,其中软件成本在那个年代占总成本的百分之90左右。
软件开发生产率跟不上计算机应用普及速度。软件产品供不应求,阻碍了人类对于当时先进计算机性能的使用。

软件危机可以概括为:落后的软件生产方式无法满足迅速增长的计算机软件需求,导致在软件开发与维护过程中出现一系列严重问题的现象。这些问题包括但不限于开发成本超支、进度延误、软件质量不达标、软件难以维护、用户需求不明确以及缺乏适当的文档资料等。软件危机是计算机软件开发和维护过程中面临的一个重要挑战,需要采取有效的措施来应对和解决。

应时代的面向对象编程

以此为背景,计算机软件开发迫切需要“可组合型”、“可延展性”、“可维护性”的编译语言,为了解决这个问题,面向对象编程的概念被提上日程。面向对象编程的一系列语言诞生——最典型的便是CPP、C#、Java…编译语言对于底层的高度抽象化,使得程序员越来越不需要知道底层是怎么进行工作的了,软硬件界限进一步分化(在汇编出现便就是软硬件分化了)。

CPP的诞生

CPP英文是C plus plus,最初是对C语言的一种拓展,不过后来因为其拓展后的功能远远超过C语言,因而被独立出来作为一种新的语言。

1979年,贝尔实验室本加尼博士等人试图分析unix内核并将其模块化,因为C语言不方便对其进行模块化,便在C语言的基础上进行了拓展,增加了类的机制,当时称之为“C with classes”。这基本可以认为是CPP语言的开端。

2.CPP语言的发展历程

CPP语言至今基本经历了三次大版本更新,虽然经过很多小版本的发布,但是因为特性小众和不实用性因而一般不被视为大版本更新。

  • 第一次是1998年到2003年,称为CPP98,2003年版本主要是对98版本的修订,因此常常视为一个版本。
    CPP标准第一个版本,得到绝大多数编译器支持,得到了国际标准化组织ISO和美国标准化协会的认可,以模板方式重写CPP标准库,引入了STL,标志这CPP已经称为一种成熟语言并得到标准协会的认可。

  • 第二次是2011年版本,我们一般称之为CPP11,里面增加了大量的新特性,毕竟接近十几年没有大改动了。
    在这个版本中,增加了许多特性,使得CPP更加高级,比如增加了正则表达式、范围for、auto自动推导、新容器哈希表、列表初始化、标准的线程库等…
    其中大部分公司和编译器均推荐支持CPP11…

  • 第三次比较大的更新是CPP20,引入了模块、协程、范围、概念等重大特性…

3.启示

我们发现:
  1.CPP语言是一个相对古老的高级语言:这就说明了CPP肯定有很多历史遗留下的语言bug,大大增加了CPP语言的学习成本
  2.CPP语言发展相对缓慢:相对于Java来说,Java基本两三年一更新,CPP则一个大版本出来需要十几年…其实这主要是因为CPP是由CPP委员会制定的,属于公益组织(没钱),而像Java这种高级语言,维护直接就是商业化公司(0racle)
  更新速度说明不了全部:但是我们需要明白的是,这并不意味着CPP发展不如Java…我们需要明白,一个语言好不好用不是只看更新速度,而要看他适合干什么,虽然CPP更新比Java慢的多,但是实际应用到工作中,我们不需要用到最新的版本,一是因为可能存在bug,二是因为程序员学习也需要时间

在这里插入图片描述


EOF


http://www.kler.cn/a/317987.html

相关文章:

  • 开源项目推荐——OpenDroneMap无人机影像数据处理
  • 解锁微前端的优秀库
  • Windows C++ TCP/IP 两台电脑上互相传输字符串数据
  • 2024-11-13 学习人工智能的Day26 sklearn(2)
  • 前端神经网络入门(三):深度学习与机器学习的关系、区别及核心理论支撑 - 以Brain.js示例
  • 读数据质量管理:数据可靠性与数据质量问题解决之道03数据目录
  • 代码随想录算法训练营Day14 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
  • 【MySQL内置数据库】information_schema
  • 【C++】检测TCP链接超时——时间轮组件设计
  • 自学前端的正确姿势是...
  • 第17周 第2章Session与ServletContext原理 ---ServletContext与三大作用域对象
  • PerparedStatement概述
  • Qt 模型视图(三):视图类QAbstractItemView
  • Python常见Json对比库deepdiff、json_tools、jsonpatch
  • 【Python】curl命令、Api POST导入cURL、python直接使用cURL
  • OpenHarmony(鸿蒙南向开发)——小型系统内核(LiteOS-A)【内核通信机制】下
  • 球体检测系统源码分享
  • Rust的作用?
  • tar.gz 文件压缩与解压shell实现
  • 付费电表系统的通用功能和应用过程参考模型(下)
  • 鸿蒙HarmonyOS开发:一次开发,多端部署(界面级)天气应用案例
  • R语言NHANES数据分析(2)
  • Angular面试题五
  • LeetCode_sql_day30(1264.页面推荐)
  • 蓝桥等考C++组-2022-11-27-八级
  • 【C++】C++中如何处理多返回值