C++命名空间:
命名空间是一个声明性区域,为其内部的标识符(类型、函数和变量等的名称)提供一个范围。 命名空间用于将代码组织到逻辑组中,还可用于避免名称冲突,尤其是在基本代码包括多个库时。 命名空间范围内的所有标识符彼此可见,而没有任何限制。 命名空间之外的标识符可通过使用每个标识符的完全限定名(例如 std::vector)来访问成员,也可通过单个标识符的 using 声明 (using std::string) 或命名空间中所有标识符的 using 指令 (using namespace std;) 来访问成员。 头文件中的代码应始终使用完全限定的命名空间名称。
#include <iostream>
using namespace std; // 定义命名空间
namespace A {
int num = 25;
void fun() {
cout << "A" << endl;
}
}
namespace B {
int num = 30;
void fun() {
cout << "B" << endl;
}
}
int main() {
// 使用命名空间A中的变量和函数
cout << A::num << endl; // 输出:25
A::fun(); // 输出: A
// 使用命名空间B中的变量和函数
cout << B::num << endl; // 输出:30
B::fun(); // 输出: B
return 0;
}
命名空间的使用:
1.定义:
1)使用 namespace关键字来定义一个命空间
#include <iostream>
namespace MyNamespace {
int p = 52;
void fun() {
std::cout << "Hello World!" << std::endl;
}
}
int main(){
//在定义命名空间后,可以通过作用域解析运算符 :: 来访问其中的符号
std::cout<<MyNamespace::p;//输出52
MyNamespace::fun();//输出:Hello World!
return 0;
}
2)使用using声明
using namespace 声明会在整个作用域中引入命名空间中的所有符号,可能会导致名称冲突
#include <iostream>
using namespace MyNamespace;
MyNamespace {
int p = 52;
void fun() {
std::cout << "Hello World!" << std::endl;
}
}
int main() {
std::cout << p << std::endl; // 直接使用符号
fun(); // 直接调用函数
return 0;
}
命名空间主要有两个重要作用:
一是避免命名冲突。
在大型程序或多个代码库组合的场景中,不同的模块、库或者程序员可能会定义相同名称的变量、函数、类等。例如,一个数学库和一个图形库可能都有一个名为“normalize”的函数。通过将它们分别放在不同的命名空间(如“math”和“graphics”)中,就可以使用“math::normalize”和“graphics::normalize”来区分调用,从而避免冲突。
二是对代码进行逻辑分组。
可以将相关的类型、函数等组织在一起,使代码结构更清晰。比如,将所有和文件操作相关的函数放在一个名为“file_util”的命名空间下,将网络相关的放在“network_util”命名空间下,方便代码的维护和理解。
命名空间嵌套:
命名空间可以嵌套定义,以更好地组织代码:
namespace MyNamespace1 {
namespace MyNamespace2 {
void fun() {
std::cout << "Hello World!" << std::endl;
}
}
}
int main() {
MyNamespace1::MyNamespace2::fun(); // 访问嵌套命名空间中的函数
return 0;
}
标签:std,namespace,C++,空间,命名,using,标识符
From: https://blog.csdn.net/2401_88249494/article/details/143721792