您现在的位置是:首页 >学无止境 >【小梦C嘎嘎——启航篇】基本语法格式:namespace ?网站首页学无止境

【小梦C嘎嘎——启航篇】基本语法格式:namespace ?

博客小梦 2024-06-15 06:01:02
简介【小梦C嘎嘎——启航篇】基本语法格式:namespace ?


追梦之旅,你我同行

   
?博客昵称:博客小梦
?最喜欢的座右铭:全神贯注的上吧!!!
?作者简介:一名热爱C/C++,算法等技术、喜爱运动、热爱K歌、敢于追梦的小博主!

?博主小留言:哈喽!?各位CSDN的uu们,我是你的博客好友小梦,希望我的文章可以给您带来一定的帮助,话不多说,文章推上!欢迎大家在评论区唠嗑指正,觉得好的话别忘了一键三连哦!?
在这里插入图片描述

前言?

    哈喽各位友友们?,我今天又学到了很多有趣的知识现在迫不及待的想和大家分享一下!?我仅已此文,和大家分享【C++入门篇】基本语法格式:namespace 的相关知识。都是精华内容,可不要错过哟!!!???

namespace 是什么?

    我一开始学C嘎嘎的时候,老师一上来就跟我说要写下面这两句代码,没有半点解释,就说以后写C嘎嘎代码就要包括这两句代码就行了。

#include<iostream>
using namespace std

namespace 的意义何在?

    为什么要这样写呢?当时我感觉到一脸懵逼。想必大家当时一开始学习C嘎嘎的时候也有这样的一个疑问。然后通过自己的瞎琢磨,对这个东西也有了一点点的理解。
    我们知道,C嘎嘎是C的进阶版,相当于是C语言的基础上进行一个补充和完善的一套语言。而namespace的出现,其实就是为了弥补C语言的一个不足。我们知道,当多人协同开发的时候,当每一个人都写自己的代码时,没准自己写的代码在函数的命名和变量名上和别人的命名是一样的,当将所有代码文件进行一个整合时就会出现重定义的问题。解决的办法就是修改其中一人的代码。然后又遇到新的问题,修改谁的代码?如果彼此都不愿意,还会引发后面的一系列复杂的问题的发生。睿智的C嘎嘎之父发现了C语言的这个问题,于是在C嘎嘎上,增加了namespace这个东西。namespace,其实是一个命名空间。它的作用就是解决命名冲突,也就是重定义的问题
    C嘎嘎是兼容C语言的,因此C语言的语法很多都是可以在C嘎嘎编译器文件上进行使用的。举个栗子

#include<iostream>

namespace tai
{
	int a = 0;
}
int main()
{
	int a = 0;
	printf("%d ", a);
}

运行截图:
在这里插入图片描述

上述代码,我们首先创建了一个命名空间域,这个名字可以任意取,但是也有限制,不要和关键字相同。我用C语言的printf在C嘎嘎文件上也可以进行一个编译运行。这里打印输出的是主函数里面的a,这是由于局部优先原则,这里面和C语言上是一致的。那么,如何让他访问命名空间域的变量a呢?很简单,我们只需要借助 :: 域作用限定符。如下面代码所示:

#include<iostream>

namespace tai
{
	int a = 1;
}
int main()
{
	int a = 0;
	printf("%d ",  a);
}

运行截图:在这里插入图片描述
因此,在自己编写的命名空间域中,是可以定义和外面相同的变量和函数这些的。不会发生命名冲突的问题。而在多个文件中,一个文件和另一个文件的代码有关命名冲突的问题就可以通过每个文件都设置一个自己的命名空间域,就可以很好的解决这个问题。方法和上面的栗子是一样的,这里就不演示啦。
namespace也是可以进行嵌套使用的

 //可以嵌套
namespace sql
{
	int a = 0;
	namespace bit
	{
		int rand = 0;
		void func()
		{
			printf("func()
");
		}

		struct TreeNode
		{
			struct TreeNode* left;
			struct TreeNode* right;
			int val;
		};
	}
}


int main()
{
	printf("%p
", rand);
	printf("%p
", sql::bit::rand);

	sql::bit::func();

	struct sql::bit::TreeNode node;

	return 0;
}

访问的时候,就需要借助 ::域作用限定符 一级一级的访问即可。

通常,我们使用namespace时,前面都会使用using,这样我们就可以省去 ::域作用限定符。写起代码就比较舒服一点。

#include <iostream>
using namespace std;
int main()
{
	// << 是流插入运算符
	/*std::cout << "hello world" << std::endl;
	std::cout << "hello world" << "
";*/

	// 自动识别类型
	int i = 11;
	double d = 11.11;
	//std::cout << i <<","<< d << std::endl;

	scanf("%d%lf", &i, &d);
	printf("%d,%lf
", i, d);

	// >>流提取
	cin >> i >> d;
	cout << i << "," << d << endl;

	return 0;
}

运行截图:
在这里插入图片描述
当直接写using namespace std,是将这个标准流给展开,如果不想展开全部给别人看,也可以指定一部分进行一个展开。按照下面这个写法也是可以的,指定需要用到的部分展开即可。

#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
	// << 是流插入运算符
	/*std::cout << "hello world" << std::endl;
	std::cout << "hello world" << "
";*/

	// 自动识别类型
	int i = 11;
	double d = 11.11;
	//std::cout << i <<","<< d << std::endl;

	scanf("%d%lf", &i, &d);
	printf("%d,%lf
", i, d);

	// >>流提取
	cin >> i >> d;
	cout << i << "," << d << endl;

	return 0;
}

运行截图:
在这里插入图片描述

总结撒花?

   本篇文章旨在分享C嘎嘎的基本语法格式:namespace 的理解和具体运用先关知识。希望大家通过阅读此文有所收获!?如果我写的有什么不好之处,请在文章下方给出你宝贵的意见?。如果觉得我写的好的话请点个赞赞和关注哦~???

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。