C++中的命名空间
在C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局命名空间中,会导致很多冲突, 使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,Namespace关键字的出现就是针对这种问题的。
1、命名空间定义
namespace Namespace
{
// 内容
}
相同命名空间可以分割在不同的文件中,编译器最后都会合成在一个命名空间下。
namespace Namespace
{
int iTest3;
int iTest4;
}
命名空间可以嵌套
namespace Namespace1
{
int iTest0;
int iTest1;
namespace Namespace2
{
int iTest1;
int iTest3;
int iTest4;
}
}
没有名称的命名空间
namespace
{}
【说明】
本质上讲,一个命名空间就定义了一个范围,在命名空间中定义的任何东西都局限于该命名空间中。没有名称的命名空间可以创建只在声明它的文件中才可见的标识符。也就是说,只有在声明这个命名空间的文件中,它的成员才是可见的,它的成员才可以被直接访问,不需要命名空间名称来修饰。对于其他文件,该命名空间是不可见的。把全局名称的作用域限制在声明他的文件中的一种方式就是把它的声明为静态的,尽管C++支持全局静态,但最好的方式还是使用未命名的空间。
2、使用方式
【命名空间内直接使用】
namespace NamespaceTest
{
int iTest0;
int iTest1;
int iTest2;
void TestNamespace()
{
iTest0 = 10;
iTest1 = 20;
}
}
【命名空间名称限制】
void TestNamespace()
{
Namespace::iTest0 = 10;
Namespace::iTest1 = 20;
}
【导入命名空间】
using namespace Namespace;
void TestNamespace()
{
iTest0 = 10;
iTest1 = 20;
}
【使用谁引入谁】
using Namespace::iTest0;
using Namespace::iTest1;
void TestNamespace()
{
iTest0 = 10;
iTest1 = 20;
}
访问命名空间里的变量和函数有两种方式:
定义命名空间:
namespace NamespaceTest
{
int iTest0;
int iTest1;
int iTest2;
void TestNamespace()
{
iTest0 = 10;
iTest1 = 20;
}
}
第一种:
使用 using namespace 空间名
例如:
using namespace NamespaceTest;
int main()
{
iTest0 = 10;
iTest1 = 20;
cout <<"a = " <<iTest0 << endl;
cout <<"b = " <<iTest1 << endl;
return 0;
}
第二种:空间名::变量(函数)
例如:
int main()
{
NamespaceTest::iTest0 = 10;
NamespaceTest::iTest1 = 20;
cout << "a = " << NamespaceTest::iTest0 << endl;
cout << "b = " << NamespaceTest::iTest1 << endl;
return 0;
}