目录
1.命名冲突
2.命名空间
1. 命名空间可以定义 变量,函数,类型
2.命名空间可以嵌套
3.命名空间的使用方式
1.命名冲突
在C语言中,我们自己定义的变量,函数可能会和库中重名冲突。
定义rand 变量
rand 和 stdlib.h所包含的库中的命名存在冲突。
这个时候,我们就不得不让步,修改自己的变量,函数名称,但是在以后我们需要多人合作写项目时,出现命名冲突再选择修改自己的命名就显得不太合适,C语言没有办法很好的解决这个问题。
C++中,有一个新的语法——命名空间
2.命名空间使用namespace 定义一个命名空间 ——域
原理:
命名空间影响的是作用域,比如,全局变量,使用时会在全局域中查找,局部变量,使用时会在局部域中查找,将变量放入命名空间后,使用时,会直接在命名空间这个域中查找,与其他的作用域隔离开,以此来解决命名冲突。
namespace + 名称 + { 域 的 内容 }
#include
#include
namespace yz
{
int rand = 0;
}
int main()
{
return 0;
}
我们定义了一个 叫 yz 的命名空间,此时在命名空间中定义函数,就不用担心命名冲突的问题了。
在命名空间中定义的变量它的使用也要通过命名空间
#include
#include
namespace yz
{
int rand = 0;
}
int main()
{
printf("%d", yz ::rand);
return 0;
}
1. 命名空间可以定义 变量,函数,类型即命名空间的名称后 加上域 *** 作符 :: (两个冒号),再加上变量名即可。
namespace yz
{
int rand = 0;
int ADD(int x, int y)
{
return x + y;
}
struct N1
{
int* a;
double b;
};
}
2.命名空间可以嵌套
namespace yz
{
int rand = 0;
namespace yz1
{
int ADD(int x, int y)
{
return x + y;
}
struct N1
{
int* a;
double b;
};
}
}
我们需要注意的是,同一个工程中允许存在多个相同名称的命名空间,编译器最后会把它合并成一个命名空间中。比如我们在头文件(.h)和 源文件(.cpp)中,都使用了相同的命名空间,编译时,会把它们合并成同一个命名空间。
3.命名空间的使用方式1. 空间名称加作用域限定符
int main()
{
printf("%d", yz::rand);
return 0;
}
指定查找的作用域,命名隔离的效果最好,但是有一些不方便。
2.使用using将命名空间中的某个成员引入
using yz::b;
int main()
{
printf("%d", yz::rand);
printf("%f", b);
return 0;
}
这是我们以后常用的用于展开命名空间
3.使用using namespace 命名空间名称 引入
using namespace yz;
int main()
{
printf("%d", yz::rand);
printf("%f", b);
ADD(10, 100);
return 0;
}
将命名空间全部展开,但是隔离失效了,不是很推荐。
我们常见的C++文件开头
#include
using namespace std;
int main()
{
return 0;
}
由于C++ 库的实现 定义在 一个叫 std的命名空间中,我们在自己练习编程时,为了方便可以直接将命名空间全部展开,但是如果做一些较大的项目 就不太推荐使用这种命名空间的使用方式。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)