前言:C++,即cplusplus,顾名思义,是C语言promax版本,C++兼容C语言。
C++的诞生是因为贝尔实验室的本贾尼等大佬认为C语言的语法坑实在太多,拥有许多不足之处(比如命名冲突,),在长期的使用后感觉多有不便,因此发明了C++,以弥补填上这些语法坑。
目录
- 命名空间
- 1.命名空间与域作用限定符::
- 2.展开命名空间
- 3.套娃
命名空间
在了解命名空间前,博主先提出一个小问题:我们常常在C++的文件开头包using namespace std;
,那么你知道这句话的作用是什么吗? (下文黄底片段)
C语言中存在着命名冲突的问题,假如未来你和你的同事合作负责一个项目,当你们各自负责的库链接起来后就可能出现命名冲突问题,比如你们声明定义了同名的变量,在C语言中,这种时候只能你们之中有一人做出让步,将所有该变量改成别名。C++的命名空间就是为解决这种情况而诞生的。
1.命名空间与域作用限定符::
namespace example
{
//命名空间中可以定义变量/函数/类。
int a = 0;
int Add(int x,int y){
return x+y;
}
}
int main()
{
//可以将命名空间想象成一个围墙,围墙里面的东西必须要有权限才能访问。
//cout << a << endl; 实操后发现并不能打印出a的值
cout << example::a << endl; //域作用限定符:: 借助该符号可以访问命名空间里的数据。
return 0;
}
2.展开命名空间
一.部分展开(授权)
假如我们需要经常使用上面创建的命名空间里的Add函数,但是每次都使用域作用限定符又显得特别繁琐。这是我们就可以展开部分命名空间。
格式为:using example::Add;
namespace example
{
int a = 0;
int Add(int x,int y){
return x+y;
}
}
using example::Add; //展开部分命名空间
int main()
{
cout << Add(1,2) << endl; //这里并没有运用与操作限定符,却也可以使用命名空间里的Add函数。
return 0;
}
二.全部展开
形式:using namespace example;
std是C++标准库的命名空间,using namespace std;就是全部展开C++标准库,如果没有展开std,那么cout,cin等语法都无法使用
namespace example
{
int a = 0;
int Add(int x, int y) {
return x + y;
}
}
using namespace example; //全部展开命名空间
int main()
{
//不用域作用限定符也可访问example里的变量,函数
cout << a << endl;
cout << Add(1, 2) << endl;
return 0;
}
3.套娃
命名空间里可以嵌套使用命名空间,不过一般不会这么使用,但是偶然看到后也不要惊奇。
namespace example
{
int a = 0;
namespace instance
{
int a = 1;
}
int main()
{
cout << example::a << endl; // 0
cout << example::instance::a << endl; // 1
return 0;
}
总结:综上,命名空间的使用共有3种方式。
今后若是想定义两个甚至多个同名的变量,可以将它们放在不同的命名空间中。
使用好命名空间,会让你在以后的练习和工作中减少许多不必要的麻烦。
文末BB:对哪里有问题的朋友,尽管在评论区留言,若哪里写的有问题,也欢迎朋友们在评论区指出,博主看到后会第一时间确定修改。最后,制作不易,如果对朋友们有帮助的话,希望能动动你们发财的小手给点点赞和关注.