namespace是用来干嘛的,考虑如下情况,
假如你写了一个函数abc(), 但是巧了,另一个库中也有一个函数叫abc(), 要怎么区别调用的到底是哪个abc()?
这时就需要namespace了,相当于提供了额外的信息以区分名字相同的函数,类,变量等。
namespace的用法如下
namespace namespace_name {
// code declarations
}
假设命名空间的名字为name, 里面有个变量var,那么调用如下
name::var;
举个例子
#include <iostream>
using namespace std;
// first name space
namespace first_space {
void func() {
cout << "Inside first_space" << endl;
}
}
// second name space
namespace second_space {
void func() {
cout << "Inside second_space" << endl;
}
}
int main () {
// Calls function from first name space.
first_space::func();
// Calls function from second name space.
second_space::func();
return 0;
}
output
Inside first_space
Inside second_space
不连续的namespace
namespace可能不在一个文件内定义,它的定义会分散于多个文件中,
而实际的namespace就是这些各个文件中定义的总和。
那么有个问题,在一个文件A的namespace中定义了a,又在另一个文件B中想调用这个a,那么就需要在文件B的namespace中声明这个a。
嵌套的namespace
比如namespace1中又定义了namespace2
namespace namespace_name1 {
// code declarations
namespace namespace_name2 {
// code declarations
}
}
调用的时候就像这样
// to access members of namespace_name2
using namespace namespace_name1::namespace_name2;
// to access members of namespace:name1
using namespace namespace_name1;
也可以用using namespace语句直接指定
#include <iostream>
using namespace std;
// first name space
namespace first_space {
void func() {
cout << "Inside first_space" << endl;
}
// second name space
namespace second_space {
void func() {
cout << "Inside second_space" << endl;
}
}
}
using namespace first_space::second_space;
int main () {
// This calls function from second name space.
func();
return 0;
}