使用命名空间
在引用命名空间成员时,要用命名空间名和作用域分辨符对命名空间成员进行限定,以区别不同的命名空间中的同名标识符。即:
命名空间名::命名空间成员名
c++提供了一些机制,能简化使用命名空间的使用:
- 使用命名空间别名
可以为命名空间起一个别名,用来替代较长的命名空间名,如:
namespace PeopleA
可以用一个较短的别名替代它。如:
namespace PA = PeopleA
- 使用using命名空间成员名
using后面的命名空间成员名必须是由命名空间限定的名字,如:
using AA::i;
- 使用using namespace命名空间名
如:using namespace AA;
声明了在本作用域中要用到命名空间AA中的成员,在使用该命名空间的任何成员时都不必再使用命名空间限定。
- c++中可以声明无名的命名空间,如:
namespace
{
void fun()
{
//....
}
}
由于命名空间没有名字,在其他文件中显然无法引用,它只在本文件的作用域有效。若无名命名空间的成员fun函数的作用域为文件A,在文件A中使用无名命名空间的成员,不用也无法用命名空间名限定。
using declarations和using directives的区别
- using declarations
示例:
#include <iostream>
int main()
{
using std::cout;
using std::endl;
cout << "Hello World!" <<endl;
return 0;
}
using std::cout就是using declarations。
using declarations方式:这种方式每次只引入一个命名空间成员,形式是 using namespace_name::member_name。
使用using declarations方式的name的作用域:它服从一般的作用域法则。name,从using declarations开始一直到当前作用域结束,都是可见的。
- using directives
using derective的形式是using namespace namespace_name;
示例:
using namespace std;
要点:using directive可以出现命名空间,函数和块中,但不能出现在类中。
参考
https://blog.csdn.net/cherishinging/article/details/73810785