c++的输入输出流在std空间内,因此为了节省代码量,直接在开头加上using namespace std;
一、为了防止对象发生冲突,需要使用空间名来限制对象的范围
//定义
namespace GKD
{
//该空间可以放置对象(变量,函数)
int data;
func_demo();
}
!!!使用using 可以把空间暴露出来,使整个文档都可见,using namespace GKD;或让某个对象暴露:using GKD::data;可能会导致对象名冲突
//引用空间的对象(注意:命名空间的函数要在内部声明和使用,如果在空间外它会找不到函数)
#include<iostream>
using namespace std;
namespace GKD
{
int data=100;
void func_demo()
{
cout << "111" << endl;
}
}
int main()
{
cout << GKD::data << endl;
GKD::func_demo();
}
输出:
100
111
二、空间的嵌套
#include<iostream>
using namespace std;
namespace GKD
{
namespace gg
{
int data=100;
void func_demo()
{
cout << "111" << endl;
}
}
}
int main()
{
cout << GKD::gg::data << endl;
GKD::gg::func_demo();
}
就是在空间里面再套个空间,引用的时候多加个就行。
三、匿名空间
关于匿名空间的对象怎么引用,直接使用就好,因为没有空间名。
#include <iostream>
using namespace std;
namespace
{
int data;
}
//匿名空间的变量直接引用!
int main()
{
data = 10;
cout << data << endl;
}
四、命名空间的跨文件使用
由于命名空间(包括匿名空间)的对象只能在本文件有效,要在其他文件中使用->就要加外部链接关键字extern。哪个文件要使用该对象,就在哪个文件的对象前面加extern。注意!两个文件中的命名空间空间名必须一致,只是使用的那个不需要赋值,而是从另一个文件获得初始值。作用:数据交互。缺点:需要写重复的定义和对象。
------demo4.cpp--------
#include<iostream>
using namespace std;
namespace XD
{
extern int c ;
extern int d ;
}
void func_XD()
{
cout <<"c:"<< XD::c <<" d:"<< XD::d << endl;
}
-----------demo3.cpp-------------
#include<iostream>
using namespace std;
extern void func_XD();
namespace XD
{
int c =100;
int d =200;
}
int main()
{
func_XD();
}