1. 何为名空间(Namespaces):
通过使用名空间(Namespaces)我们可以将一组全局范围有效的类、对象或函数组织到一个名字下面。换种说法,就是它将全局范围分割成许多子域范围,每个子域范围叫做一个名空间(namespaces)。
2. 名空间定义:
名空间的定义格式是:
namespace identifier
{
namespace-body
}
这里identifier 是一个有效的标示符,namespace-body 是该名空间包含的一组类、对象和函数。例如:
namespace general
{
int a, b;
}
访问办法是:
general::a
general::b
名空间(namespaces)的作用在于全局对象或函数很有可能重名而造成重复定义的错误,名空间的使用可以避免这些错误的发生。举例如下:
#include <iostream.h>
namespace first {
int var = 5;
}
namespace second {
double var = 3.1416;
}
int main () {
cout << first::var << endl;
cout << second::var << endl;
return 0;
}
3. 名空间的使用:
使用遵循以下原型定义:
using namespace identifier;
看例子:
#include <iostream.h>
namespace first {
int var = 5;
}
namespace second {
double var = 3.1416;
}
int main () {
{
using namespace first;
cout << var << endl;
}
{
using namespace second;
cout << var << endl;
}
return 0;
}
4. 名空间别名定义(alias definition):
我们以可以为已经存在的名空间定义别名,格式为:
namespace new_name = current_name ;
5. 标准名空间(Namespace std):
ANSI C++ 标准定义,标准C++库中的所有类、对象和函数都是定义在名空间std下面的。
几乎所有的编译器,即使是那些与ANSI 标准兼容的编译器,都允许使用传统的头文件 (如iostream.h, stdlib.h, 等等),就像我们在这个教程中所使用的一样。然而,ANSI标准完全重新设计了这些函数库,利用了模板功能,而且遵循了这条规则将所有的函数和变量定义在了名空间std下。
该标准为这些头文件定义了新的名字,对针对C++的文件基本上是使用同样的名字,但没有.h的扩展名,例如, iostream.h 变成了iostream。
如果我们使用ANSI-C++ 兼容的包含文件,我们必须记住所有的函数、类和对象是定义在名空间 std 下面的,例如:
#include <iostream>
int main () {
std::cout << "Hello world in ANSI-C++\n";
return 0;
}
更常用的方法是使用using namespace ,这样我们就不必在所有标准空间中定义的函数或对象前面总是使用范围操作符::了 :
#include <iostream>
using namespace std;
int main () {
cout << "Hello world in ANSI-C++\n";
return 0;
}
对于STL 用户,强烈建议使用ANSI-compliant 方式来包含标准函数库。