1. 命名空间
在c语言中,变量和函数的名称都存在全局作用域当中,这可能会导致冲突。而C++为了解决这类问题,引入了命名空间这个概念的目的是: 对标识符的名称进行本地化, 以避免命名冲突或名字污染 namespace关键字的出现就是针对这种问题的。
如 C语言在未引入
stdlib.h
之前,定义一个整型变量 并命名为rand
程序并未报错,而引入后再使用rand
变量就发生报错。
2. 命名空间定义
定义命名空间,需要使用namespace
关键字,后面跟这 命名空间的名字 ,并**一对{}即可,而在{}**里则即命名空间的成员。
注意:一个命名空间就定义了一个新的作用域,该空间中的所有内容都局限于该命名空间中。
#include <iostream>
using namespace std;
namespace pear
{
int rand = 66;
void cout()
{
std::cout << "这是pear空间" << endl;
}
}
namespace test
{
int rand = 88;
void cout()
{
std::cout << "这是test空间" << endl;
}
}
int main()
{
cout << pear::rand << endl;
cout << test::rand << endl;
pear::cout();
test::cout();
cout << "Hello World!\n";
}
这里定义了两个空间 :pear 和 test ,各自空间中,同名的变量和函数,都互不干扰!!!
2.1 命名空间的嵌套
命名空间也可以嵌套。
#include <iostream>
using namespace std;
namespace pear
{
int rand = 66;
void cout()
{
std::cout << "这是pear空间" << endl;
}
namespace test //pear的子空间
{
int rand = 88;
void cout()
{
std::cout << "这是test空间" << endl;
}
}
}
int main()
{
cout << pear::rand << endl;
cout << pear::test::rand << endl;
pear::cout();
pear::test::cout();
cout << "Hello World!\n";
}
2.2 命名空间的合并
同一个工程中允许存在多个相同名称的命名空间,编译器最后会合并成同一个命名空间中,但相同名称的命名空间的变量或函数名出现相同则会出现错误。
namespace pear
{
int rand = 66;
void cout()
{
std::cout << "这是pear空间" << endl;
}
}
namespace pear
{
int rand = 88;
void cout()
{
std::cout << "这是test空间" << endl;
}
}
3. 命名空间的使用
命名空间的使用有三种方法:
- 限定访问
std::cout << "这是pear空间" << endl;
::
是作用域限定符,std
是C++库标准域,其标准库中的对象、函数等都存在这个域中。在待使用的对象的左旁 加命名空间名称及作用域限定符
- 指定引入
#include <iostream>
using std::cout;
using std::endl;
int main()
{
cout << "Hello World!" << endl;
}
在全局域中使用
using
导入某域中的变量等。
- 全局展开
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
}
使用using namespace 命名空间名称 引入