基本语法格式: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()\n");
}
struct TreeNode
{
struct TreeNode* left;
struct TreeNode* right;
int val;
};
}
}
int main()
{
printf("%p\n", rand);
printf("%p\n", 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" << "\n";*/
// 自动识别类型
int i = 11;
double d = 11.11;
//std::cout << i <<","<< d << std::endl;
scanf("%d%lf", &i, &d);
printf("%d,%lf\n", 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" << "\n";*/
// 自动识别类型
int i = 11;
double d = 11.11;
//std::cout << i <<","<< d << std::endl;
scanf("%d%lf", &i, &d);
printf("%d,%lf\n", i, d);
// >>流提取
cin >> i >> d;
cout << i << "," << d << endl;
return 0;
}
运行截图: