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

【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.mrgr.cn/news/35197.html

相关文章:

  • 嵌入式交叉编译:glib(未成功)
  • 单元测试、集成测试、系统测试有什么区别
  • 【数据结构】什么是链栈?
  • 【JavaScript】LeetCode:96-100
  • 达梦数据库迁移j脚本
  • C++初阶——stack
  • 掌握Python办公自动化,轻松成为职场高效达人
  • 特殊类设计
  • 一步一步优化一套生成式语言模型系统
  • 二分查找算法(8) _点名
  • Solidity——抽象合约和接口详解
  • 【python】数据类型
  • WebRtc实际应用
  • 【数学二】极限的计算- 等价无穷小替换、洛必达法则求极限
  • 找不到MFC140.dll无法继续执行代码怎么办,共有6种解决方法
  • 离线一机一码验证和网络验证的区别以及使用场景
  • Figma 中要放大并下载 UI 设计中的图标
  • 如何利用 Kafka,实时挖掘企业数据的价值?
  • 基于Ambari搭建大数据分析平台(30分钟速成)全网最全最详细的Ambari搭建大数据分析平台:
  • (13)mysql慢查询常用语句
  • 船只类型识别系统源码分享
  • 月考成绩发布步骤-易查分
  • 异云双活实践案例
  • 【Docker】如何让docker容器正常使用nvidia显卡
  • 大数据Flink(一百二十四):案例实践——淘宝母婴数据加速查询
  • CaLM 因果推理评测体系:如何让大模型更贴近人类认知水平?