C++命名空间(namespace)提出的原因及解决的问题
目录
在c++中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。
工程越大,名称互相冲突性的可能性越大。
另外使用多个厂商的类库时,也可能导致名称冲突。
为了避免,在大规模程序的设计中,以及在程序员使用各种各样的C++库时,这些标识符的命名发生冲突,
标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地 控制标识符的作用域 。
namespace A{
int a = 10;
}
namespace B{
int a = 20;
}
void test(){
cout << "A::a : " << A::a << endl;
cout << "B::a : " << B::a << endl;
}
【cout是c++中的标准输出流,endl是输出换行并刷新缓冲区】
命名空间只能全局范围内定义#
应该写在全局范围
void test(){
局部变量
namespace A{ 错误写法!!!!
int a = 10;
}
namespace B{ 错误写法!!!!
int a = 20;
}
cout << "A::a : " << A::a << endl;
cout << "B::a : " << B::a << endl;
}
命名空间可嵌套命名空间#
namespace A{
int a = 10;
namespace B{
int a = 20;
}
}
void test(){
cout << "A::a : " << A::a << endl;
cout << "A::B::a : " << A::B::a << endl;
}
命名空间可以随时把新的成员加入已有的命名空间中#
命名空间是开放的,即可以随时把新的成员加入已有的命名空间中【命名空间下可以放函数、变量、结构体、类】
namespace A{
int a = 10; # 变量
struct Person # 结构体
{
};
class Animal{}; # 类
}
namespace A{ // 【这里的A命名空间会合上面的命名空间A进行合并】
void func(){ # 函数
cout << "hello namespace!" << endl;
}
}
void test(){
cout << "A::a : " << A::a << endl;
A::func();
}
声明和实现可分离#
namespace MySpace{
void func1();
void func2(int param);
}
void MySpace::func1(){
cout << "MySpace::func1" << endl;
}
void MySpace::func2(int param){
cout << "MySpace::func2 : " << param << endl;
}
无名(匿名)命名空间,相当于给这个标识符加上了static【只能在本文件内访问】#
无名(匿名)命名空间,意味着命名空间中的标识符【只能在本文件内访问】,相当于给这个标识符加上了static,使得其可以作为内部连接
namespace{
int a = 10;
void func(){ cout << "hello namespace" << endl; }
}
【相当于写了 static int a ; static void func(){} 这些都只能在当前文件内使用】
void test(){
cout << "a : " << a << endl;
func();
}
命名空间别名#
namespace veryLongName{
int a = 10;
void func(){ cout << "hello namespace" << endl; }
}
void test(){
namespace shortName = veryLongName;
cout << "veryLongName::a : " << shortName::a << endl;
veryLongName::func();
shortName::func();
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)