资料摘自《C++ Primer Plus》
c++关于全局变量和局部变量的规则定义了一种名称空间层次。每个声明区域都可以声明名称,这些名称独立于其他声明区域中声明的名称。在一个函数中声明的局部变量不会与在另一个函数中声明的局部变量发生冲突。
使用关键字namespace创建名称空间
namespace Jack {
double pail;
void fetch();
int pal;
struct Well {...};
}
namespace Jill {
double bucket(double n) {...}
double fetch;
int pal;
struct Hill{...};
}
名称空间可以是全局的,也可以位于另一个名称空间中,但不能位于代码块中。除用户定义的名称空间外,存在另一个名称空间--全局名称空间。
访问名称空间中的名称
Jack::pail = 2.34;
Jill::Hill mole;
Jack::fetch();
使用using
using Jill::fetch; //using声明:使该空间下指定的名称可用
using namespace Jack; //using编译指令:使该空间下所有的名称都可用
using namespace std;
fetch(); //调用的是Jack::fetch();
cout << pal << endl; //使用的是Jack::pal
名称空间嵌套
namespace elements {
namespace fire {
int flame; //即elements::fire::flame
...
}
float water;
}
未命名的名称空间
namespace {
int ice;
int bandycoot;
}
示例:
namespace Jill {
double bucket(double n) {...}
double fetch;
struct Hill {...};
}
char fetch; //全局空间
int main() {
using namespace Jill;
Hill Thrill; //使用Jill::Hill
double water = bucket(2); //使用Jill::bucket(double)
double fetch; //局部fetch
std::cin >> fetch;
std::cin >> ::fetch; //全局空间的fetch
std::cin >> Jill::fetch; //Jill空间下的fetch
}