你好,C++(1)C++是什么?C++的“前世今生”

转载:你好,C++(1)C++是什么?C++的“前世今生” - 知乎 (zhihu.com)

The world is built on C++.

——Herb Sutter

the chairman of the ISO C++ standards committee

and chief native languages architect at Microsoft

前传 C++世界地图

如果我们要到某个陌生的地方去旅行,我们往往有很多疑问:这个地方有什么好玩的?在哪儿可以吃饭?在哪儿又可以住店?这时我 们只需要一张内容详尽的旅行地图就可以解决这些问题。同样地,对于即将进入C++世界的我们,心中同样也有着很多疑问:C++是什么?C++是怎么来的? 它能做什么?而我又如何才能完成我的第一个C++程序?面对这些问题,我们所需要的同样是一张C++世界地图。它可以解答我们的这些问题,让我们清晰地认 识C++世界。同时,我们还可以通过这张C++世界地图更多地了解C++世界:有哪些好玩的地方,有什么有趣的故事,有哪些有用的知识与经验,又有什么危 险而需要注意的陷阱。这张C++世界地图,将带领我们畅游整个C++世界。

还等什么?让我们带上它马上出发吧!

1.1 C++是什么

C++是什么?

这几乎是每个第一次来到C++世界的旅行者都会问的第一个问题。在百科全书上,它的解释是“C++是一种静态数据类型检查 的、支持多种编程范式(面向过程与面向对象等)的通用程序设计语言”。虽然这里的静态数据类型、面向对象等修饰语我们还看不太懂,但这里我们至少知道了一 点——C++是一种语言,更确切地说,是一种用于程序设计的语言。就像现实世界中的自然语言是用来表达我们的思想一样,C++作为一门程序设计语言,同样 也是用来表达我们的思想的,只不过接受它的对象是计算机,所以它有着不同的语法和表达方式。只要我们学会了英语,就可以用英语跟老外交流。同样地,只要我 们学会了C++,也同样可以用C++跟计算机交流,让计算机去帮助我们做一些事情。

既然C++是一门语言,那么它也就必然有着自己的语法规则,也有自己的基本词汇和句型,也可以分成不同的段落和篇章等等。用自然语言描述一个事物,是作文,而用程序设计语言描述一个事物,就是编程。总之,我们可以把C++当作我们的第二外语来学习和运用。

知道更多:编程是怎么回事?

语言,是用来描述和表达现实世界的,C++作为一门编程语言也不例外。作为自然语言,为了描述现实世界中的事物,我们需要一些名词(陈老师、曾学 生)。这些名词在C++中就是变量(teChen、stZeng);同时这些名词都有自己的种类(老师、学生),表现在C++中就是变量的数据类型 (Teacher、Student);为了表达事物之间的关系,我们需要一些动词(指导),然后用这些动词将各个事物连缀成句子(老师指导学生)。这些动 词表现在C++中就是函数(Guide()),而由这些动词连缀而成的句子在C++中就成了表达式 (huTeacher.Guide(huStudent););将多个句子按照一定的逻辑关系组合起来,就可以形成一篇文章。同样,在C++中利用一定的 逻辑控制结构将多个表达式组合起来就形成了程序。


 

Teacher teChen;  // 陈老师
Student stZeng;  // 曾学生teChen.Guide(stZeng);  // 老师指导学生
// 用if条件控制结构组织表达式
if(stZeng.m_nScore >= 60) // 如果学生的成绩大于或等于60
{stZeng.m_bPass = true;  // 学生及格
}

通过C++编程语言与自然语言的对比,我们可以轻松地理解C++程序的含义。编程,就是将描述现实世界的自然语言翻译成C++语言的过程,如此而 已。而这也提示我们,在编写程序之前,不妨先把程序所要描述的事物(通常是某个数据处理过程)先用自然语言把它描述一遍,然后再翻译成对应的C++编程语 言,就得到了最后的C++程序。

1.2 C++的“前世今生”

读史可以使人明智。

C++作为一门高级程序设计语言,可说是历史悠久,算得上是程序设计语言中的“老革命”了。了解C++的发展历史,可以加深我们对这门语言的认识,了解C++的本质内涵,理解C++的文化,从而可以更好地学习和掌握这门语言。

传说,很久很久以前……

1.2.1 从B到C

1967年,著名的计算机科学家丹尼斯·里奇(Dennis Ritchie)进入美国AT&T的贝尔实验室工作。一开始,里奇和他的同事肯·汤普森(Ken Thompson)开始研究DEC PDP-7这种早期计算机,但是他们发现在这个机器上写程序很困难,只能使用繁琐的汇编语言编程。所谓的汇编语言(Assembly Language),是一种比较接近计算机底层的低级程序设计语言。在汇编语言中,它用助记符(MOV、PUSH、POP等)代替机器语言的操作码,用地 址符号或者标号代替机器语言的地址码。在执行的时候,用汇编语言编写的程序并不能被计算机直接识别和执行,我们还需要通过一个叫汇编程序的工具将汇编语言 重新翻译成机器语言,然后交由计算机执行。虽然,汇编语言借助助记符和地址符号在一定程度上降低了编写程序的难度,但是因为它接近计算机底层,因而它所编 写出来的程序依然难以阅读和理解,程序的开发效率非常低下。

为了解决这个难题,汤普森设计了一种高级程序语言来代替汇编语言,并将其命名为B语言。但是由于B语言本身设计的缺陷,使得 汤普森在内存的限制面前一筹莫展。到了1973年,里奇对B语言进行了改良,从而赋予了这门新语言强有力的系统控制能力,同时,新语言也做到了简洁而高 效。里奇把它命名为C语言,意为B语言的下一代程序设计语言。

知道更多:B语言又是从哪里来的?

C语言来自B语言,那么B语言是不是来自A语言呢?B语言之前并不存在A语言,之所以取名为B语言,是作者为了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS三大特性(层叠性、继承性、优先级)

一、层叠性 1.样式冲突,就近原则,那个样式离着结构近,就执行那个样式; 2.样式不冲突,不会重叠。 二、继承性 (1)子元素可以继承父元素的样式(text-,font-&#xff0c…

idea中定时+多数据源配置

因项目要求,需要定时从达梦数据库中取数据,并插入或更新到ORACLE数据库中 1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-…

centos7服务器上的文件上传到谷歌云盘(google drive)

1,下载gdrive客户端&#xff0c;Releases glotlabs/gdrive GitHub 2&#xff0c;下载完解压,并移动到cp gdrive /usr/local/bin/ 3&#xff0c;查看是否安装成功 4,添加账户&#xff0c;gdrive account add 根据链接&#xff0c;创建Client id和 Client secret 5,填写Client…

QT-ClementineMusierPlaey音乐播放器

QT-ClementineMusierPlaey音乐播放器 一、效果二、下载链接 一、效果 二、下载链接 https://download.csdn.net/download/u013083044/88629413

致远互联-OA wpsAssistServlet 任意文件读取漏洞复现

0x01 产品简介 致远互联-OA 是数字化构建企业数字化协同运营中台,面向企业各种业务场景提供一站式大数据分析解决方案的协同办公软件。 0x02 漏洞概述 致远互联-OA wpsAssistServlet 存在任意文件读取漏洞,攻击者可读取系统密码等敏感信息进一步控制系统。 0x03 复现环境…

整理b站黑马程序员C++课程中对于计算机视觉学习有所帮助的知识点。(重点用*标出)

文章目录 1、注释2、变量3、常量4、标识符5、整型 浮点型 字符型 字符串 布尔6、输入 输出7、逻辑运算法8、 程序流程结构9、三目运算符10、switch语句11、循环语句12、跳转语句13、*数组13.1一维数组名 14、二维数组15、**函数15.1、函数的调用15.2、函数的声明15.3、函数份文…

Java集合扩容机制深度解析

引言 在Java中&#xff0c;ArrayList 和 HashMap 是常见的集合类&#xff0c;它们的性能与扩容机制密切相关。在本文中&#xff0c;我们将深入剖析这两个集合类的扩容机制&#xff0c;透过底层实现理解它们在元素数量增加时如何进行动态扩容。 1. ArrayList的扩容机制 1.1 初…

VMware安装Windows V10

一、安装Windows系统 1.下载Windows IOS 镜像文件 Windows官网 1&#xff09;点击下载工具 2&#xff09;点击 MediaCreationTool22H2.exe 运行 3&#xff09;选择&#xff1a;为另一台电脑创建安装介质&#xff08;U盘、DVD或者ISO文件&#xff09; 4&#xff09;根据自身…

Flink的容错机制

容错机制 容错&#xff1a;指出错后不影响数据的继续处理&#xff0c;并且恢复到出错前的状态。 检查点&#xff1a;用存档读档的方式&#xff0c;将之前的某个时间点的所有状态保存下来&#xff0c;故障恢复继续处理的结果应该和发送故障前完全一致&#xff0c;这就是所谓的检…

纳米软件分享:电源自动测试系统是什么?有什么特点和优势?

随着技术的发展以及测试需求的严格性&#xff0c;一种新的、利用软硬件结合的自动化测试方式油然而生。 电源自动测试系统是一种用于电子与通信技术领域的电子测量仪器&#xff0c;可以提供众多变化的硬件选择&#xff0c;满足产品升级所带来的新的测试要求。电源自动测试系统通…

Windows ❀ 关闭Google的自动更新功能

文章目录 1. 故障问题2. 解决方法 1. 故障问题 如何关闭掉Google的自动更新功能&#xff1f; 2. 解决方法 修改更新域名本地hosts为环回地址即可。 # 禁止google自动更新 127.0.0.1 update.googleapis.com备注&#xff1a; mac路径&#xff1a;/etc/hostswindows路径&…

Ansible介绍与安装

Ansible目前是运维自动化工具中最简单、容易上手的一款优秀软件&#xff0c;能够用来管理各种资源。用户可以使用Ansible自动部署应用程序&#xff0c;以此实现IT基础架构的全面部署。例如&#xff0c;借助于Ansible&#xff0c;我们可以轻松地对服务器进行初始化配置、安全基线…

IDEA中显示方法、类注释信息

目录 一、IDEA测试版本及环境二、操作步骤2.1 鼠标悬停在某一个方法上&#xff0c;从而显示方法的注释信息2.2 调用方法时同步显示方法注释信息2.3 在new一个对象时&#xff0c;这个对象有很多重载的构造方法&#xff0c;想要重载的构造函数都显示出来 一、IDEA测试版本及环境 …

LeetCode刷题--- 二叉搜索树中第K小的元素

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 【 http://t.csdnimg.cn/yUl2I 】【C】 【 http://t.csdnimg.cn/6AbpV 】数据结构与算法 【 http://t.csdnimg.cn/hKh2l 】 前言&#…

大一C语言作业 12.14

1.A A&#xff1a;将pa指向的元素赋值给x&#xff0c;即x a[0] B&#xff1a;将a数组第二个元素的值赋给x&#xff0c;即x a[1] C&#xff1a;将pa指向的下一个元素的值赋给x&#xff0c;即x a[1] D&#xff1a;将a数组第二个元素的值赋给x&#xff0c;即x a[1] 2. 6 2 3 …

在IDEA中配置Git的Push键

前言 笔者在重新安装IDEA过程中需要重新绑定了Git&#xff0c;发现提交代码过程中push键消失了&#xff0c;所以笔者就以这篇文章记录一下Git配置push键的详细过程。 注意笔者当前IDEA版本为2019&#xff0c;可能和读者有所区别&#xff0c;但是操作思路是差不多的。 操作步…

推荐域名销售管理系统网站源码

域名销售管理系统网站源码是一个完整的网站开发项目&#xff0c;包含了域名销售管理的各项功能&#xff0c;如域名搜索、购买、转让、续费等。源码采用了先进的技术和设计&#xff0c;能够满足用户的各种需求&#xff0c;是一个高效、稳定的域名销售管理系统。 演示地 址 &…

使用ThreadLocal.withIniti避免初始化为null问题

问题描述 我们在使用threadLocal的时&#xff0c;使用ThreadLocal.withInitial去初始化而不是使用new ThradLocal去初始化&#xff0c;这是为什么呢&#xff1f; 问题例子 比如说&#xff0c;假设我们想要在每个线程中维护一个独立的计数器 import java.util.concurrent.at…

【EI会议征稿】第五届机械仪表与自动化国际学术会议(ICMIA 2024)

第五届机械仪表与自动化国际学术会议&#xff08;ICMIA 2024&#xff09; The 5th International Conference on Mechanical Instrumentation and Automation 2024年第五届机械仪表与自动化国际学术会议&#xff08;ICMIA 2024&#xff09;定于2024年4月5-7日在中国武汉隆重…

BUUCTF-[GYCTF2020]FlaskApp flask爆破pin

这道题不需要爆破也可以getshell ssti都给你了 {{((lipsum.__globals__.__builtins__[__import__](so[::-1])[popen]("\x63\x61\x74\x20\x2f\x74\x68\x69\x73\x5f\x69\x73\x5f\x74\x68\x65\x5f\x66\x6c\x61\x67\x2e\x74\x78\x74")).read())}} 但是学习记录一下pin…