命名空间
2015-08-12 10:08
190 查看
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
为了避免变量或函数重命名;在命名空间中的每个名字必须表示唯一实体,而在不同命名空间中,可以有相同名字的成员;
需要使用命名空间的作用域运算符(::)。
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
相关文章推荐
- C# 不同状态下鼠标状态的切换
- POJ 2349 Arctic Network(最小生成树--prime)
- linux中Cron定时任务系统命令详解
- JavaScript实现点击单选按钮改变输入框中文本域内容的方法
- Java通过百度地图API获取地址经纬度
- Linux kernel AIO这个奇葩
- LeetCode题解:Pascal's Triangle
- 几个CSS的黑科技
- 纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等),NB么?
- java中的foreach输出数组中的元素
- 4Sum
- 如何获取经纬度之间两点间真实距离(适用于GoogleMap,BaiduMap,Amap等)
- Hibernate 缓存机制
- 字符串中第一次只出现一次的字符(×60内推笔试)
- AppStore审核问题
- Why Coding Like this -------Optional揭秘 自己写一个可选类型类
- 我的实习作品:基于GeoHey地图的学区房应用
- HDU 3226 背包
- Apache+Tomcat集群配置
- HDU 5375 DP