C C++最新【C++干货基地】namespace超越C语言的独特魅力(文末送书(1),疯狂膜拜

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上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;
}

在这里插入图片描述

所以我们在C++ 可以使用 namespace 定义一个命名空间在这个命名空间里就相当于拿一个围栏来围起来这样在 namespace 里面就相当于一个单独的空间了。

  • 而我们在使用的时候只需要使用单独展开就可以使用了,相互之间并不冲突

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++图书推荐

《高效C/C++调试》是一本精心编写的实用指南,为软件开发工程师提供了宝贵的调试技巧和知识。作者通过多年的一线经验,深入讲解了如何高效地调试软件内存故障、理解C++对象模型、阅读汇编代码等重要内容。书中还介绍了调试器插件和工具的开发,拓展了开发者的视野。无论是初学者还是有经验的开发人员,都能从本书中获得实际的指导和启发。丰富的实战例子和代码片段让读者更好地理解和应用所学知识。如果你想提升调试能力、掌握C/C++高级内容,并成为实战资质的中高级开发人员,那么这本书绝对是你的不二选择。

在这里插入图片描述

3.1 内容简介

《高效C/C++调试》是关于软件调试技术的深度探索,融合了作者的实践智慧。书中不仅指导读者如何使用专业的调试工具,还介绍了如何宏观和微观地分析问题,并**限度地发挥调试器功能。此外,书中还深入解读了调试背后的技术原理,如调试符号、内存管理及系统内核对内存的操作机制,以揭示内存管理的关键性和复杂性。 除了介绍基础概念外,本书还涵盖了许多增强调试能力的工具与插件。尽管焦点集中在C/C++,但其中的策略与技巧具有普适性,适用于多种编程语境。内容包括从内存泄漏预防调试、Linux下的eBPF和strace调试方法,到Kubernetes容器调试,再到C++20的协程与崩溃信息收集策略。 《高效C/C++调试》主要面向具有C/C++编程基础的读者,同时也非常适合对软件技术原理有深入探索兴趣的读者以及追求高效调试技巧的开发

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  本章小结 28

第2章   堆数据结构 29

2.1  理解内存管理器 30

2.1.1  ptmalloc 31

2.1.2  TCMalloc 34

2.1.3  多个堆 38

2.2  利用堆元数据 39

2.3  本章小结 42

第3章   内存损坏 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 | 随机抽取由博主动态公布抽奖结果

如有特别需要的同学可添加博主微信进入粉丝福利群发放福利哦!
🔥 注:活动结束后,会私信中奖粉丝的,各位注意查看私信哦!

⛳️ 文章末尾扫码加入粉丝群,不定期发放粉丝福利,各种专业书籍免费赠送

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

后,会私信中奖粉丝的,各位注意查看私信哦!**

⛳️ 文章末尾扫码加入粉丝群,不定期发放粉丝福利,各种专业书籍免费赠送

[外链图片转存中…(img-AvsMyY64-1715723805319)]
[外链图片转存中…(img-AFlBDklk-1715723805319)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值