命名空间(namespace)的本质是可以更好的控制标识符的作
用域
命名空间可以存放:类 函数 变量 结构体。。。。。。
1.名字控制:
创建名字是程序设计过程中给一项最基本的活动,当一个项目
很大时,它会不可避免地包含大量名字。c++允许我们对名字
的产生和名字的可见性进行控制。
之前在学习c语言的时候可以通过static关键字来使得名字只得
在本编译单元内可见,在c++中可以通过一种命名空间来控制
2.c++命名空间
在c++中,名称可以时符号常量、变量、函数、结构、枚举、
类和对象等等。工程越大,名称互相冲突性的可能性越大,
另外使多个厂商的类库使,也可能导致名称冲突,为了避免
在大规模程序设计中,以及程序员在使用各种各样的库时,
这些标识的命名发生冲突,标准c++引入关键字namespace
(命名空间/名字空间/名称空间),,可以更好的控制标识符
的作用域。
3.命名空间使用语法
#include<iostream>
using namespace std;
//命名空间的定义必须定义在全局范围
//命名空间下可以存放 变量 函数 结构体 类
//命名空间可以重名,重名的命名空间相当于做合并操作
//命名空间可以嵌套命名空间
//命名空间是可以去取别名的 namespace newname=oldname
int a = 30;
namespace A
{
int a = 10;
void fun() {
cout << "hello namespace" << endl;
};//函数
struct abc {};//结构体
class bcd {};//类
}
namespace newA = A;
namespace B
{
int a = 10;
int b = 15;
namespace C
{
int a = 25;
}
}
namespace D
{
void foo(int agr);
}//这个是属于D作用域下的函数
void D::foo(int agr) {
cout << agr << endl;
};//这个是属于全局作用域下的函数
//两个函数不冲突可以一起使用
void test03() {
D::foo(120);
}
//注意:如果命名空间没有名字 那么这个命名空间内的所有成员都被加上了static修饰(意思就是该命名空间只能在当前文件内使用,属于内部链接属性)
namespace {
int s = 88;
}
int main()
{
cout << A::a << endl;
cout << B::b << endl;
cout << B::a << endl;
cout << a << endl;
A::fun();
cout << B::C::a << endl;
cout << ::s << endl;
test03();
cout << newA::a << endl;
return 0;
}