一、历史
C++是在C上继承拓展的!
java是一家公司(甲骨文)借鉴C++生成的!
C#是微软借鉴java生成的!
二、命名空间
当我们定义一个名叫rand的变量,但是由于stdlib头文件里面有个函数跟rand重名!因此会发生命名冲突!
因此为了解决该问题,C++引入了命名空间的定义!
同一个域里面不可以定义同一个变量!
不同的域里面可以定义同一个变量!(局部变量访问优先)
常见的域有:类域、命名空间域、局部域、全局域
#include<stdio.h>
#include<stdlib.h>
int a = 0;
int main()
{
int a = 1;
printf("%d\n", a);
printf("%d\n", ::a);
return 0;
}
对于上面这段代码, 打印的第一个a为局部变量;第二个::a为全局变量。
::被称为域作用限定域!
::的左边为空白!(空格无影响),表示的就是在全局域访问!
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
int a = 0;
namespace bit
{
int a = 1;
}
int main()
{
// int a = 2;
printf("%d\n", a); // 打印结果为0
//printf("%d\n", ::a);
return 0;
}
默认的访问顺序为 局部域->全局域
如果不指定不会访问命名空间域!(默认不会的)
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
//int a = 0;
namespace bit
{
int a = 1;
}
int main()
{
// int a = 2;
printf("%d\n", a);
//printf("%d\n", ::a);
return 0;
}
代码会直接报错!
有两种方法来访问命名空间域:
- 展开了命名空间域!
- 指定访问的的命名空间域!
1、展开命名空间域
namespace bit
{
int a = 1;
}
// 展开命名空间
using namespace bit;
此时相当于将命令空间中的a暴漏在全局域中!
#include<stdio.h>
#include<stdlib.h>
#include&l