1. 命名空间
std 命名空间
:: 域控制符
1.1. 自己写命名空间
namespace myspace{
int a(15);
}
int main(){
int a(5);
std:cout<<"main a="<<a<<std::endl; //5
std:cout<<"myspace a="<<myspace::a<<endl; //15
- 没有命名的命名空间可以直接调用
#include<iostream>
namespece
{
int a(3);
void print()
{
std::cout<<"print"<<std::endl;
}
}
int main()
{
std::cout<<a;
print();
}
- 给命名空间起别名
namespace runrun
{
int a(10);
}
namespace r=runrun;//给命名空间起别名
int main()
{
std::cout<<r::a<<std::endl;
}
- 命名空间嵌套
namespace run
{
int a(10);
namespace runrun
{
int b(2);
}
}
int main()
{
std::cout<<run::runrun::b<<endl;//命名空间可以嵌套
}
- 命名空间的拓展
namespace run
{
int a(10);
}
namespace run
{
int b(2);
}
int main()
{
std::cout<<run::b<<endl;//命名空间可以拓展,相当于在原来的基础上加上新的
}
1.2. 软件开发注意事项
- 不要把函数写在命名空间内部
namespace myspce
{
int y(5);
int (*padd)(int,int);//函数指针作为接口
}
int add(int a,int b)
{
return a+b;
}
namespace 所有数据,函数,类,对象都是共有的。命名空间是透明的,结构体默认是透明的,但可以添加private来进行保护。类默认是私有的。
1.3. using 作用域
- using必须在命名空间后方,作用域从现在到最后
- using如果变量重命名,会出现不明确错误,加上命名空间才可以使用
- 命名空间在块语句内部,作用域是定义开始到块语句结束
1.4. 命名空间的区别
C出现重名,没办法引用全局变量
C++可通过域控制符获得
#include<iostream>
int a=1;
int main()
{
int a=2;
std::cout<<::a<<endl;//1
std::cout<<a<<endl;//2
}
注:双冒号前面什么都没有,表示全局
1.5. 命名空间用处
主要用于迭代式开发处理文件名的冲突