using声明
形式:
using mysapce::myname; //表示声明namespace空间的name成员
作用域:从using声明地方开始,一直到using声明所在的作用域结束为止,在此过程中外层作用域的同名实体将被隐藏。
using指示
形式:
using namespace myname;
作用域规则与声明相同
对比
- using指示无法控制哪些名字是可见的,因为命名空间所有名字都是可见的。
- using声明可以出现在全局作用域、局部作用域、命名空间作用域以及类作用域;using指示只能不能出现在类作用域。
- using指示具有将命名空间成员提升到包含命名空间本身和using指示最近作用域的能力。
//命名空间A和函数f定义在全局作用域中
namespace A
{
int i,j;
}
void f()
{
using namespace A; //把A中的名字注入到全局作用域中
cout<<i*j<<endl; //使用命名空间A中的i和j
//...
}
总结
在头文件顶层作用域中应避免含有using指示或using声明,则会将名字注入所有包含该头文件的文件中。而通常情况下头文件只负责定义接口部分的名字,而不定义实现部分的名字。因此头文件最只能在它的函数或命名空间内使用using指示和using声明。