详解C++中命名空间的意义和用法
2015-11-02 12:19
323 查看
原文:http://www.jizhuomi.com/software/289.html
看过鸡啄米的C++编程入门系列教程的朋友,应该能注意到,在其中的很多实例中,都有这么一条语句:using namespace std;,即使用命名空间std,其作用就是规定该文件中使用的标准库函数都是在标准命名空间std中定义的。本文就详细讲解命名空间的意义和用法。
命名空间的意义
为什么需要将函数定义在命名空间中呢?这其实是为了避免变量或函数重命名的问题。试想,一个项目组内多个工程师进行开发,有可能会出现全局变量或函数重名的现象,而如果每个人都定义了自己的命名空间,就可以解决这个问题,即使重名,只要分属不同的命名空间就不会引起问题。
这样大家应该明白了,命名空间就是将多个变量和函数等包含在内,使其不会与命名空间外的任何变量和函数等发生重命名的冲突。
命名空间实例
下面鸡啄米给出一个使用命名空间的实例。实例中有两个命名空间JiZhuoMi和Software,他们中都有一个名为szUrl的字符串,我们试着访问并输出这两个字符串。
C++代码
#include <iostream>
using namespace std;
// 命名空间JiZhuoMi
namespace JiZhuoMi
{
char *szUrl = "www.jizhuomi.com";
}
// 命名空间Software
namespace Software
{
char *szUrl = "www.jizhuomi.com/software/";
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << JiZhuoMi::szUrl << endl; // 输出命名空间JiZhuoMi中的字符串
cout << Software::szUrl << endl; // 输出命名空间Software中的字符串
return 0;
}
此实例运行结果分别输出JiZhuoMi和SoftWare的字符串。
详解C++中命名空间的意义和用法
我们看到,使用“命名空间::标识符名称”的方式就可以访问命名空间中的变量或函数了,而且即使是重复命名也可以正确访问。
using namespace *;的意义
在上面的实例中,我们访问命名空间JiZhuoMi和Software中的字符串变量时,都需要在前面加上“命名空间::”,但cout定义在命名空间std中,前面却不需要加“std::”,这是因为上面这样一条语句“using namespace std;”。
using namespace *;(这里的*表示可以是任何命名空间)的作用是释放命名空间*中的变量或函数等,使之在被访问时可以不必加“命名空间::”,访问方法与一般的变量或函数无异,就像上面的cout一样。
using namespace *;会给我们书写程序带来方便,但也要慎用,如果释放了多个命名空间中的东西后,它们又可能会引起命名冲突。鸡啄米给大家演示下同时释放JiZhuoMi和Software命名空间的情况。
C++代码
#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;
}
上例中,编译器会提示编译错误,因为它不知道该访问哪个命名空间中的字符串变量szUrl。这时要想正确访问,还需在szUrl前面加上命名空间修饰。
而如果main函数中又定义了一个局部变量szUrl呢?
C++代码
#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[])
{
char *szUrl = "url";
cout << szUrl << endl;
return 0;
}
运行后我们发现,szUrl访问正确,可见,这种情况下,编译器优先访问局部变量。
关于命名空间的内容就讲到这里了,希望大家能够使用命名空间很好的为软件开发服务。
看过鸡啄米的C++编程入门系列教程的朋友,应该能注意到,在其中的很多实例中,都有这么一条语句:using namespace std;,即使用命名空间std,其作用就是规定该文件中使用的标准库函数都是在标准命名空间std中定义的。本文就详细讲解命名空间的意义和用法。
命名空间的意义
为什么需要将函数定义在命名空间中呢?这其实是为了避免变量或函数重命名的问题。试想,一个项目组内多个工程师进行开发,有可能会出现全局变量或函数重名的现象,而如果每个人都定义了自己的命名空间,就可以解决这个问题,即使重名,只要分属不同的命名空间就不会引起问题。
这样大家应该明白了,命名空间就是将多个变量和函数等包含在内,使其不会与命名空间外的任何变量和函数等发生重命名的冲突。
命名空间实例
下面鸡啄米给出一个使用命名空间的实例。实例中有两个命名空间JiZhuoMi和Software,他们中都有一个名为szUrl的字符串,我们试着访问并输出这两个字符串。
C++代码
#include <iostream>
using namespace std;
// 命名空间JiZhuoMi
namespace JiZhuoMi
{
char *szUrl = "www.jizhuomi.com";
}
// 命名空间Software
namespace Software
{
char *szUrl = "www.jizhuomi.com/software/";
}
int _tmain(int argc, _TCHAR* argv[])
{
cout << JiZhuoMi::szUrl << endl; // 输出命名空间JiZhuoMi中的字符串
cout << Software::szUrl << endl; // 输出命名空间Software中的字符串
return 0;
}
此实例运行结果分别输出JiZhuoMi和SoftWare的字符串。
详解C++中命名空间的意义和用法
我们看到,使用“命名空间::标识符名称”的方式就可以访问命名空间中的变量或函数了,而且即使是重复命名也可以正确访问。
using namespace *;的意义
在上面的实例中,我们访问命名空间JiZhuoMi和Software中的字符串变量时,都需要在前面加上“命名空间::”,但cout定义在命名空间std中,前面却不需要加“std::”,这是因为上面这样一条语句“using namespace std;”。
using namespace *;(这里的*表示可以是任何命名空间)的作用是释放命名空间*中的变量或函数等,使之在被访问时可以不必加“命名空间::”,访问方法与一般的变量或函数无异,就像上面的cout一样。
using namespace *;会给我们书写程序带来方便,但也要慎用,如果释放了多个命名空间中的东西后,它们又可能会引起命名冲突。鸡啄米给大家演示下同时释放JiZhuoMi和Software命名空间的情况。
C++代码
#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;
}
上例中,编译器会提示编译错误,因为它不知道该访问哪个命名空间中的字符串变量szUrl。这时要想正确访问,还需在szUrl前面加上命名空间修饰。
而如果main函数中又定义了一个局部变量szUrl呢?
C++代码
#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[])
{
char *szUrl = "url";
cout << szUrl << endl;
return 0;
}
运行后我们发现,szUrl访问正确,可见,这种情况下,编译器优先访问局部变量。
关于命名空间的内容就讲到这里了,希望大家能够使用命名空间很好的为软件开发服务。
相关文章推荐
- 【C/C++学院】0823-静态联合编译与动态联合编译/父类指针子类指针释放/虚函数/纯虚函数概念以及虚析构函数/抽象类与纯虚函数以及应用/虚函数原理/虚函数分层以及异质链表/类模板的概念以及应用
- C++11 标准新特性:Defaulted 和 Deleted 函数
- c语言学习之基础知识点介绍(十):内存空间模型、地址解释及指针变量
- 今日学习札记——C++程序设计1(11-02)
- C++标准库阅读摘要
- 3.2 ACM输入输出--多组测试用例--C、C++
- ——黑马程序员——C语言中的指针(二)
- C语言第五章 语句
- C++11 多线程下生产者消费者模型详解
- 做c语言的码农专业发展方向
- C语言设计模式
- C++ 初始化列表
- 外部exe程序启动CAD并且自动加载CAD的ARX程序的过程
- OC语言中BOOL 和 bool 区别
- 《C++ primer》英文第五版阅读笔记(七)——定义自己的数据类型
- C语言第四章
- C语言程序如何优化
- 某国内知名自主研发游戏公司C++笔试题
- 数码视讯2015秋季校园招聘C++笔试题
- C++中int、double、float。string等常见类型转换