行业知识
【C++干货基地】namespace超越C语言的独特魅力(文末送书)
�� 个人专栏: 《C++干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活!
引入
哈喽各位铁汁们好啊,我是博主鸽芷咕《C++干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的城市有没有这种实惠又全面的零食基地呢?C++ 本身作为一门篇底层的一种语言,世面的免费课程大多都没有教明白。所以本篇专栏的内容全是干货让大家从底层了解C++,把更多的知识由抽象到简单通俗易懂。
⛳️ 推荐
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
文章目录
- 引入
- ⛳️ 推荐
- 一、C++的发展历史
- 1.1 C/C++的市场份额
- 1.2 编程语言的历史走向
- 1. Top 10 Tiobe指数走向 (2002-2023)
- 2. 编程语言历史排名(1998 - 2023)
- 3. 编程语言“名人榜” (2003 - 2022)
- 1.3 C++工作领域
- 二、命名空间的概念
- 2.1 命名空间的创建
- 2.2 命名空间的使用
- 域作用限定符
- 域的扩展
- 2.1 std命名空间的细节
- 命名空间可以重名吗?
- 命名空间的展开
- 三、C/C++图书推荐
- 3.1 内容简介
- 3.2 图书目录
- 3.3 购买链接
- 四、粉丝福利
一、C++的发展历史
C++又叫Cplusplus 其实就是C语言的升级版啦,是,Bjarne Stroustrup博士 在1982年在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为为了表达该语言与C语言的渊源关系,命名为C++。
- 所以我们说C++ 是 C语言的升级版,下面我们就来看C++究竟升级了那些部分吧?
1.1 C/C++的市场份额
我们大家都知道 世面上最火的俩门语言分别是 java 和 C/C++ 而C/C++ 2022的份额加起来甚至超过了%20还多。一度成为年度最热语言
1.2 编程语言的历史走向
1. Top 10 Tiobe指数走向 (2002-2023)
2. 编程语言历史排名(1998 - 2023)
3. 编程语言“名人榜” (2003 - 2022)
上图数据来自TIOBE编程语言社区近几年的排行榜,在30多年的发展中,C/C++几乎一
致稳居前5。
注意:排名不能说明那个语言好,那个不好,每门编程语言都有适应自己的应用场景。
1.3 C++工作领域
- 操作系统以及大型系统软件开发
所有操作系统几乎都是C/C++写的,许多大型软件背后几乎都是C++写的,比如:
Photoshop、Office、JVM(Java虚拟机)等,究其原因还是性能高,可以直接操控硬件。
- 服务器端开发
后台开发:主要侧重于业务逻辑的处理,即对于前端请求后端给出对应的响应,现在主流采
用java,但内卷化比较严重,大厂可能会有C++后台开发,主要做一些基础组件,中间件、
缓存、分布式存储等。服务器端开发比后台开发跟广泛,包含后台开发,一般对实时性要求
比较高的,比如游戏服务器、流媒体服务器、网络通讯等都采用C++开发的。
- 游戏开发
PC平台几乎所有的游戏都是C++写的,比如:魔兽世界、传奇、CS、跑跑卡丁车等,市面上
相当多的游戏引擎都是基于C++开发的,比如:Cocos2d、虚幻4、DirectX等。三维游戏领
域计算量非常庞大,底层的数学全都是矩阵变换,想要画面精美、内容丰富、游戏实时性
搞,这些高难度需求无疑只能选C++语言。比较知名厂商:腾讯、网易、完美世界、巨人网
络等。
- 嵌入式和物联网领域
嵌入式:就是把具有计算能力的主控板嵌入到机器装置或者电子装置的内部,能够控制这些
装置。比如:智能手环、摄像头、扫地机器人、智能音响等。
谈到嵌入式开发,大家最能想到的就是单片机开发(即在8位、16位或者32位单片机产品或者
裸机上进行的开发),嵌入式开发除了单片机开发以外,还包含在soc片上、系统层面、驱动
层面以及应用、中间件层面的开发。
常见的岗位有:嵌入式开发工程师、驱动开发工程师、系统开发工程师、Linux开发工程
师、固件开发工程师等。
知名的一些厂商,比如:以华为、vivo、oppo、小米为代表的手机厂;以紫光展锐、乐鑫为
代表的芯片厂;以大疆、海康威视、大华、CVTE等具有自己终端业务厂商;以及海尔、海
信、格力等传统家电行业。
随着5G的普及,物联网(即万物互联,)也成为了一种新兴势力,比如:阿里lot、腾讯lot、京
东、百度、美团等都有硬件相关的事业部。
- 数字图像处理
数字图像处理中涉及到大量数学矩阵方面的运算,对CPU算力要求比较高,主要的图像处理
算法库和开源库等都是C/C++写的,比如:OpenCV、OpenGL等,大名鼎鼎的Photoshop
就是C++写的。
- 人工智能
一提到人工智能,大家首先想到的就是python,认为学习人工智能就要学习python,这个
是误区,python中库比较丰富,使用python可以快速搭建神经网络、填入参数导入数据就
可以开始训练模型了。但人工智能背后深度学习算法等核心还是用C++写的。
- 分布式应用
近年来移动互联网的兴起,各应用数据量业务量不断攀升;后端架构要不断提高性能和并发
能力才能应对大信息时代的来临。在分布式领域,好些分布式框架、文件系统、中间组件等
都是C++开发的。对分布式计算影响极大的Hadoop生态的几个重量级组件:HDFS、
zookeeper、HBase等,也都是基于Google用C++实现的GFS、Chubby、BigTable。包括分
布式计算框架MapReduce也是Google先用C++实现了一套,之后才有开源的java版本。
除了上述领域外,在:科学计算、浏览器、流媒体开发、网络软件等都是C++比较适合的场景,
作为一名老牌语言的常青树,C++一直霸占编程语言前5名,肯定有其存在的价值。
二、命名空间的概念
说了这么多那么我们今天就来介绍一下 C++ 的学习都说C++是C语言的升级版毕竟都叫 Cplusplus 了没点本事怎么敢这样叫呢?
C++ 第一个升级的地方就是命名空间的概念,以往我们在写C语言程序的时候的变量和函数都是大量存在的,而C++中还有类也是大量存在这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。
比如在 有俩个业务员去负责俩个模块但是他们去的函数名都一样在自己的机器上都运行的好好的一旦把自己的代码合并到主服务器上去就出现命名冲突的问题导致程序崩溃。
- 所以为了解决这个问题C++ 中就有了命名空间的概念,这也是我们要学的第一个关键字 namespace
2.1 命名空间的创建
以往我们在定义全局变量的时候如果和库函数语言了就会导致出现命名冲突的情况
#include #include int rand = 10;// C语言没办法解决类似这样的命名冲突问题// 所以C++提出了namespace来解决int main(){printf("%d\n", rand);return 0;}所以我们在C++ 可以使用 namespace 定义一个命名空间在这个命名空间里就相当于拿一个围栏来围起来这样在 namespace 里面就相当于一个单独的空间了。
- 而我们在使用的时候只需要使用单独展开就可以使用了,相互之间并不冲突
2.2 命名空间的使用
命名空间的使用非常简单就直接使用关键字和命名空间名,就可以了。这这个空间里面我们可以定义变量函数,或者结构体等等是相当于一个单独的作用域。
- 命名空间相当于在全局作用域上开辟了一片新的领土所以他与全局范围的变量并不冲突
#define _CRT_SECURE_NO_WARNINGS 1#includenamespace gugu{int rand = 0;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};}域作用限定符
而我们想要使用命名空间就需要 域作用限定符 :: 这个东西了,他可以让我们访问到命名空间的的内容
- 域作用限定符 左边事命名空间名 :: 右边是要访问的内容
代码演示:
#define _CRT_SECURE_NO_WARNINGS 1#includeusing namespace std;namespace gugu{int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};}int main(){cout int rand = 10;int Add(int left, int right){return left + right;}struct Node{struct Node* next;int val;};}int main(){int rand = 20;cout int rand = 10;}namespace gugu{int x = 20;}int main(){int rand = 20;cout int rand = 20;cout
- 域作用限定符 左边事命名空间名 :: 右边是要访问的内容
- 命名空间相当于在全局作用域上开辟了一片新的领土所以他与全局范围的变量并不冲突
- 而我们在使用的时候只需要使用单独展开就可以使用了,相互之间并不冲突
- 所以我们说C++ 是 C语言的升级版,下面我们就来看C++究竟升级了那些部分吧?