C++相较与C语言加入了类的概念,C语言中有大量变量和函数存在于全局作用域中,在C++中类也存在于全局作用域中,可能会产生冲突。C++为避免这些冲突,加入了命名空间概念。
命名空间格式
namespace name
{
datatype name;
fun()
{
}
...
}
命名空间中可以定义变量、声明&定义函数等。
命名空间引用格式
定义好的命名空间引用格式为
namespace a
{
int b = 5;
}
int mian()
{
printf("%d", a::b);
}
其中 :: 符号为作用域限定符,命名空间相当于创建了一个域,这个域与全局作用域相当,但就像两个位面的一样,互不干扰。若不用作用域限定符或者展开作用域则不能使用命名空间里的变量或函数等。a::b 的意义为在a域中的变量b;
命名空间的展开
有时候我们要使用命名空间内的成员时像上面那样使用又觉得麻烦,这时候就可以将命名空间展开使用语句using namespace name; 即可将命名空间展开。然后即可将命名空间内的成员当全局变量使用。 注意 将命名空间展开命名空间将不在具有不引用不显现特性,将变得和普通全局变量相同,不过是static 修饰过的变量。在一个文件内部将命名空间展开,这个命名空间内的成员作用域将仅限在此文件内,不能被其他文件引用。 可以用展开命名空间后命名空间成员不能被其他文件引用的特性替代关键字static
部分展开命名空间
ex:
namespace a
{
int b = 5;
double c = 3.14;
}
using a::b;
int main()
{
printf("%lf\n", a::c);
printf("%d", b);
}
运行后就可以发现都可以输出。这种部分展开不会整个破坏命名空间结构,只会将展开的成员暴露在全局作用域中。
命名空间的使用不止这一点,以后学习到后将在开博客记录。
|