0
点赞
收藏
分享

微信扫一扫

rocketmq4.9.4有bug,生产勿用

求索大伟 2024-01-22 阅读 30

在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏: 《C++干货基地》《粉丝福利》

⛺️生活的理想,就是为了理想的生活!

引入

⛳️ 推荐

文章目录

一、C++的发展历史

1.1 C/C++的市场份额

在这里插入图片描述

1.2 编程语言的历史走向

1. Top 10 Tiobe指数走向 (2002-2023)

在这里插入图片描述

2. 编程语言历史排名(1998 - 2023)

在这里插入图片描述

3. 编程语言“名人榜” (2003 - 2022)

在这里插入图片描述

上图数据来自TIOBE编程语言社区近几年的排行榜,在30多年的发展中,C/C++几乎一
致稳居前5。

🔥 注意:排名不能说明那个语言好,那个不好,每门编程语言都有适应自己的应用场景。

1.3 C++工作领域

  1. 操作系统以及大型系统软件开发
  1. 服务器端开发
  1. 游戏开发
  1. 嵌入式和物联网领域
  1. 数字图像处理
  1. 人工智能
  1. 分布式应用

除了上述领域外,在:科学计算、浏览器、流媒体开发、网络软件等都是C++比较适合的场景,
作为一名老牌语言的常青树,C++一直霸占编程语言前5名,肯定有其存在的价值。

二、命名空间的概念

C++ 第一个升级的地方就是命名空间的概念,以往我们在写C语言程序的时候的变量和函数都是大量存在的,而C++中还有类也是大量存在这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。

比如在 有俩个业务员去负责俩个模块但是他们去的函数名都一样在自己的机器上都运行的好好的一旦把自己的代码合并到主服务器上去就出现命名冲突的问题导致程序崩溃。

  • 所以为了解决这个问题C++ 中就有了命名空间的概念,这也是我们要学的第一个关键字 namespace

2.1 命名空间的创建

以往我们在定义全局变量的时候如果和库函数语言了就会导致出现命名冲突的情况

#include <stdio.h>
#include <stdlib.h>
int rand = 10;
// C语言没办法解决类似这样的命名冲突问题
// 所以C++提出了namespace来解决
int main()
{
	printf("%d\n", rand);
	return 0;
}

在这里插入图片描述

2.2 命名空间的使用

命名空间的使用非常简单就直接使用关键字和命名空间名,就可以了。这这个空间里面我们可以定义变量函数,或者结构体等等是相当于一个单独的作用域。

  • 命名空间相当于在全局作用域上开辟了一片新的领土所以他与全局范围的变量并不冲突
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>

namespace 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
#include<iostream>
using 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 << gugu::rand << endl;
}
域的扩展

前面说域的可能很多老铁不太明白,其实域一共有这几种

局部域
全局域
命名空间域
类域

域作用限定符 的 概念就是 从指定的域里面去访问,平常我们访问一个变量是优先 局部作用域去寻找的,然后再去全局范围进行寻找,但是用了 域作用限定符 就不一样:

  • 它会从指定范围进行寻找
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using 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()
{
	int rand = 20;
	cout << gugu::rand << endl;
}

2.1 std命名空间的细节

命名空间可以重名吗?

这里很多人肯定以为命名空间不能重名但是在C++中其实命名空间是可以重名的:

🍸 代码演示:

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

namespace gugu
{
	int rand = 10;

}
namespace gugu
{
	int x = 20;
}

int main()
{
	int rand = 20;
	cout << gugu::rand << endl;
}

📑 代码结果:
在这里插入图片描述

假设我们有俩个项目需要俩个人来进行写代码,但是他们所写的项目都属于一个命名空间里面的,这时候可以重名的优势就体现出来了,他们俩个一起写的代码都会合并到同一个命名空间。

命名空间的展开

虽然命名空间很好用但是有很多人说,这每次使用起来也太麻烦了吧,每一个函数都要加 域作用限定符 。别急其实命名空间还有一种用法就是展开使用:

using namespace std; 其中 stdstd的所有C++库命名空间
using 是使用这个命名空间的意思

🍸 代码演示:

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;


int main()
{
	int rand = 20;
	cout << rand << endl;
}

using namespace std; 加上我们就可以使用全部的官方库了,但是这里要注意头文件是把代码合并过来,而展开命名空间是把这个块空间公开。

三、C/C++图书推荐

在这里插入图片描述

3.1 内容简介

3.2 图书目录

目    录

第1章   调试符号和调试器 1

1.1  调试符号 1

1.1.1  调试符号概览 2

1.1.2  DWARF格式 3

1.2  实战故事1:数据类型的不一致 14

1.3  调试器的内部结构 16

1.3.1  用户界面 16

1.3.2  符号管理模块 16

1.3.3  目标管理模块 17

1.4  技巧和注意事项 21

1.4.1  特殊的调试符号 21

1.4.2  改变执行及其副作用 24

1.4.3  符号匹配的自动化 25

1.4.4  后期分析 26

1.4.5  内存保护 27

1.4.6  断点不工作 27

1.5  本章小结 282章   堆数据结构 29

2.1  理解内存管理器 30

2.1.1  ptmalloc 31

2.1.2  TCMalloc 34

2.1.3  多个堆 38

2.2  利用堆元数据 39

2.3  本章小结 423章   内存损坏 43

3.1  内存是怎么损坏的 44

3.1.1  内存溢出与下溢 44

3.1.2  访问释放的内存 45

3.1.3  使用未初始化的值 46

3.2  调试内存损坏 47

3.2.1  初始调查 49

3.2.2  内存调试工具 53

3.2.3  堆与栈内存损坏对比 53

3.2.4  工具箱 54

3.3  实战故事2:神秘的字节序转换 55

3.3.1  症状 55

3.3.2  分析和调试 56

3.3.3  错误和有价值的点 64

3.4  实战故事3:覆写栈变量 65 ...

3.3 购买链接

京东购买链接:《高效C/C++调试》

四、粉丝福利

  • 参与方式:关注博主、点赞收藏评论,任意评论(每人最多评论三次)

  • ⛳️本次送书1~3取决于阅读量,阅读量越多,送的越多

  • 📆 活动时间至:2023-1-23 10:00:00 | 随机抽取由博主动态公布抽奖结果

如有特别需要的同学可添加博主微信进入粉丝福利群发放福利哦!

🔥 注:活动结束后,会私信中奖粉丝的,各位注意查看私信哦!

举报

相关推荐

0 条评论