1、定义命名空间
命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示:
namespace namespace_name {
// 代码
}
在调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,如下所示:
name::var; // var 可以是变量或函数
例如,
#include <iostream>
using namespace std;
// 第一个命名空间
namespace my_space1{
void func(){
cout << "不同命名空间的同名函数(my_space1)" << endl;
}
}
// 第二个命名空间
namespace my_space2{
void func(){
cout << "不同命名空间的同名函数(my_space2)" << endl;
}
}
int main ()
{
// 调用第一个命名空间中的函数
my_space1::func();
// 调用第二个命名空间中的函数
my_space2::func();
return 0;
}
2、using 关键字
可以使用 using namespace
指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。
例如,
#include <iostream>
using namespace std;
// 第一个命名空间
namespace my_space1{
void func(){
cout << "不同命名空间的同名函数(my_space1)" << endl;
}
}
// 第二个命名空间
namespace my_space2{
void func(){
cout << "不同命名空间的同名函数(my_space2)" << endl;
}
}
using namespace my_space1;
int main ()
{
// 调用第一个命名空间中的函数
func();
// 调用第二个命名空间中的函数
my_space2::func();
return 0;
}
3、命名空间嵌套
命名空间可以嵌套,即一个命名空间可以包含另一个命名空间。
#include<iostream>
using namespace std;
namespace Outer {
namespace Inner {
void display() {
std::cout << "Hello from Inner namespace!" << std::endl;
}
}
}
int main() {
Outer::Inner::display();
return 0;
}
4、匿名命名空间
匿名命名空间是没有名字的命名空间,通常用于在文件内定义仅在该文件作用域内有效的内容。它的作用类似于 static
关键字,防止外部链接。
#include <iostream>
using namespace std;
namespace {
int x = 10;
void display() {
std::cout << "Hello from anonymous namespace!" << std::endl;
}
}
int main() {
display(); // 只在当前文件中有效
std::cout << "x = " << x << std::endl;
return 0;
}