当前位置首页 > 百科> 正文

名字空间

2017-12-12 22:36:09 百科

名字空间

名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关键字“namespace”,使用名字空间时用符号“::”指定。

基本介绍

  • 中文名:名字空间
  • 外文名:namespace
一、名字空间的定义
名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关键字“namespace”,使用名字空间时用符号“::”指定。
  1. 不指定名字空间的变数或函式都是当前名字空间下的变数或函式。
  2. 不定义名字空间的情况下,都属于全局名字空间。
  3. 同一个名字空间可以定义多次。
#include<iostream>
using namespace std;
namespace na
{
void print(int n)
{
//与名字空间nb的函式名相同
cout << "na::print: " << n << endl;
}
}
namespace nb
{
void print(int n)
{
//与名字空间na的函式名相同
cout << "nb::print: " << n << endl;
}
}
namespace na //同一个名字空间可以定义多次
{
void print2(int a, int b)
{
print(a);
print(b);
}
}
int main ( )
{
na::print(3); 指定na下的print函式
na::print(4); 指定na下的print函式
na::print2(5, 6); 指定na下的print2函式
return 0;
}
二、using的使用
使用“using namespace”可以使得后面不需要每次指定名字空间,相当于java中的import功能。不过,多次使用“using namespace”时,被指定的名字空间同时有效,很容易冲突。
#include <iostream>
using namespace std;
namespace na
{
void print(int a) {
cout << "na::print: " << a << endl; }
}
namespace nb
{
using namespace na;
void print2(int a, int b) { //这是nb自身的函式
print(a); //na的函式
print(b); //na的函式}
void print(int n) { //这也是nb自身的函式
cout << "nb::print: " << n << endl; }
}
namespace nc
{
using nb::print2; //指定只使用nb的print2()函式
void print(int a, int b, int c) {
print2(a, b); //这是nb的函式
nb::print(c); //using中没有指定,所以这儿必须用nb::来指定}
}
int main ( ) {
using namespace na;
print(2);//na的print()函式
//using namespace nb;
//这样使用时,na和nb同时有效
//print(3);
//编译系统不清楚究竟调用na和nb中的哪一个,因为函式名和参数相同using namespace nc;
//这样使用时,na和nc同时有效
print(4, 5, 6); //nc的print()函式的参数与na中的参数不同,所以这儿不出错。
using nb::print; //指定下面用的print()函式是nb的函式
print(7);
return 0;}
三、用别名指定名字空间
名字空间可以一层层嵌套,指定时也得一层层地指定,这样很不方便,一般用别名代替就方便多了。
#include <iostream>
using namespace std;
namespace na
{
namespace nb
{ namespace nc
{
int sum(int a, int b) { return a + b; }
}
}
}
namespace A = na::nb::nc;
int main ( )
{
cout << na::nb::nc::sum(5, 11) << endl;
cout << A::sum(6, 12) << endl; return 0;
}
四、没有名字的名字空间
名字空间的名字也可以省略,称之为“无名名字空间”,无名名字空间经常被使用,其作用是“内部可以引用,而外部不能引用”。
#include <iostream>
using namespace std;
namespace na {
namespace
{ //无名名字空间
int sum(int a, int b) { return a + b; }
}
int calc(int x, int y)
{ return sum(x, y); //内部可以调用无名名字空间的变数或函式
}
}
int main ( ) {
//cout << na::sum(5, 11) << endl; //因为缺少里面的名字,所以外部不能调用
cout << na::calc(6, 12) << endl;
return 0;}
声明:此文信息来源于网络,登载此文只为提供信息参考,并不用于任何商业目的。如有侵权,请及时联系我们:baisebaisebaise@yeah.net