C++中命名空间的意义
为了避免变量或函数重命名;在命名空间中的每个名字必须表示唯一实体,而在不同命名空间中,可以有相同名字的成员;
需要使用命名空间的作用域运算符(::)。
using指示:using namespace std; // 引入命名空间std
using声明:using 命名空间名::[命名空间名::……]成员名; // 例如 using OLib::List;
区别:using声明是将一个成员引入当前命名空间作用域内;using指示是将所有成员引入当前和上一层命名空间作用域内
例子:
#include <iostream>
using namespace std;
namespace JiZhuoMi // 命名空间JiZhuoMi
{
char *szUrl = "www.jizhuomi.com";
}
namespace Software // 命名空间Software
{
char *szUrl = "www.jizhuomi.com/software/";
}
int main(int argc, char* argv[])
{
cout << JiZhuoMi::szUrl << endl; // 输出命名空间JiZhuoMi中的字符串
cout << Software::szUrl << endl; // 输出命名空间Software中的字符串
return 0;
}
运行结果:www.jizhuomi.com
www.jizhuomi.com/software/
“using namespace *;”的意义
访问命名空间JiZhuoMi和Software中的字符串变量时,都需要在前面加上“命名空间::”,但cout定义在命名空间std中,前面却不需要加“std::”,这是因为上面这样一条语句“using namespace std;”。
using namespace *;(这里的*表示可以是任何命名空间)的作用是释放命名空间*中的变量或函数等,使之在被访问时可以不必加“命名空间::”,访问方法与一般的变量或函数无异,就像上面的cout一样。
using namespace *;会给我们书写程序带来方便,但也要慎用,如果释放了多个命名空间中的东西后,它们又可能会引起命名冲突。鸡啄米给大家演示下同时释放JiZhuoMi和Software命名空间的情况。
例子:
#include <iostream>
using namespace std;
// 命名空间JiZhuoMi
namespace JiZhuoMi
{
char *szUrl = "www.jizhuomi.com";
}
// 命名空间Software
namespace Software
{
char *szUrl = "www.jizhuomi.com/software/";
}
// 释放命名空间JiZhuoMi和Software
using namespace JiZhuoMi;
using namespace Software;
int _tmain(int argc, _TCHAR* argv[])
{
cout << szUrl << endl; // 这里会提示编译错误,因为它不知道访问哪个变量
return 0;
}
//本文来源于鸡啄米http://www.jizhuomi.com/ , 原文地址:http://www.jizhuomi.com/software/289.html
//编译错误
针对同时释放多个命名空间的上述例子,出现编译错误是由于不知道访问哪个命名空间中的变量,如果在main中重新定义,如下例子
例子:
#include <iostream>
using namespace std;
// 命名空间JiZhuoMi
namespace JiZhuoMi
{
char *szUrl = "www.jizhuomi.com";
}
// 命名空间Software
namespace Software
{
char *szUrl = "www.jizhuomi.com/software/";
}
// 释放命名空间JiZhuoMi和Software
using namespace JiZhuoMi;
using namespace Software;
int main(int argc, char* argv[])
{
char *szUrl = "url";
cout << szUrl << endl;
return 0;
}
//本文来源于鸡啄米 http://www.jizhuomi.com/ , 原文地址:http://www.jizhuomi.com/software/289.html
运行结果:url