命名空间
来源:互联网 发布:好搜seo 好搜索引擎 编辑:程序博客网 时间:2024/05/21 18:43
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
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- 命名空间
- Linux kernel AIO这个奇葩
- LeetCode题解:Pascal's Triangle
- Java通过百度地图API获取地址经纬度
- 安装Python
- C# 不同状态下鼠标状态的切换
- 命名空间
- (转) Logistic regression (逻辑回归) 概述
- Java中的集合框架
- 关于背面剔除的概念。
- JSON.parse()和JSON.stringify()
- 二叉搜索树与双向链表
- Android研究院之ListView原理学习与优化总结(二十一)
- java--反射
- Spring+Velocity中模板路径的问题