命名空间的概念

2016-01-29 12:18 9 1 收藏

命名空间的概念,命名空间的概念

【 tulaoshi.com - C语言心得技巧 】

命名空间的概念
作者:王 军

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com)很多初学C++的人,对于C++中的一些基本的但又不常用的概念感到模糊,命名空间(namespace)就是这样一个概念。
C++中采用的是单一的全局变量命名空间。在这单一的空间中,如果有两个变量或函数的名字完全相同,就会出现冲突。当然,你也可以使用不同的名字,但有时我们并不知道另一个变量也使用完全相同的名字;有时为了程序的方便,必需使用同一名字。比如你定义了一个变量string user_name, 有可能在你调用的某个库文件或另外的程序代码中也定义了相同名字的变量,这就会出现冲突。命名空间就是为解决C++中的变量、函数的命名冲突而服务的。解决的办法就是将你的strTemp变量定义在一个不同名字的命名空间中。就好像张家有电视机,李家也有同样型号的电视机,但我们能区分清楚,就是因为他们分属不同的家庭。

例如:
#include <iostream>#include <string>using namespace std;

//using namespace编译指示,使在C++标准类库中定义的名字在本程序中可以使用
//否则,iostream,string 等c++标准类就不可见了,编译就会出错。

//两个在不同命名空间中定义的名字相同的变量
namespace myown1{string user_name = "myown1";}namespace myown2{string user_name = "myown2";}int main(){cout<< "n"<< "Hello, " << myown1::user_name//用命名空间限制符myown1访问变量user_name<< "... and goodbye!n";cout<< "n"<< "Hello, " << myown2::user_name //用命名空间限制符myown2访问变量user_name<< "... and goodbye!n";return 0;}
当然,我们也可以使用程序开头的预编译指示来使用命名空间中的名字。使用预编译指示的好处在于在程序中不必显式地使用命名空间限制符来访问变量。以上主程序可修改为:
int main(){using namespace myown1;cout<< "n"<< "Hello, " << user_name<< "... and goodbye!n";//using namespace myown2;cout<< "n"<< "Hello, " << myown2::user_name //用命名空间限制符myown2访问变量user_name<< "... and goodbye!n";return 0;}
但第二个变量必需用命名空间限制符来访问,因为此时myown1空间中的变量已经可见,如果不加限制,编译器就会无法识别是那一个命名空间中的变量。这一点一定要注意。 以上只是初学者不清楚的一个概念,在以后的文章中还将继续讨论其它的一些概念。

来源:http://www.tulaoshi.com/n/20160129/1485503.html

延伸阅读
标签: Web开发
XML 命名空间提供了一种避免元素命名冲突的方法。 命名冲突 因为XML文档中使用的元素不是固定的,那么两个不同的XML文档使用同一个名字来描述不同类型的元素的情况就可能发生。而这种情况又往往会导致命名冲突。请看下面两个例子 这个 XML 文档在table元素中携带了水果的信息: table tr tdApples/td tdBananas/td /tr /table ...
===定义标记和命名空间=== HTC的基础是自定义标记,自定义标记的第一次出现是在IE5。0中,它可以让WEB作者通过与结构关联的一系列样式来定义文挡结构,例如:您可以定义一个新标记 (段落右对其) @media all { DOCJS\:RIGHT {text-align:right; width:100} } Read Doc JavaScript's columns, tips, tools, and tutorials ...
使用IronPython时,导入名字空间: from System.Data import * 报错:'package#'? object has no attribute 'data' 但是其它的名字空间System.Web,System.Xml,System.IO,System.Text都没有问题, 不知道是不是因为Python不适合作这方面的程序
标签: windows10
win10组策略命名空间已经被定义   1、进入C:WindowsPolicyDefinitions,找到Microsoft-Windows-Geolocation-WLPAdm.admx文件并删除 2、如果由于权限问题无法删除(如上图),可利用软媒魔方的设置大师为鼠标右键菜单加入管理员取得所有权功能 3、再次进入第1步位置,找到需要删除的文件,在该文件上点击右键,选择管...
标签: windows10
win10策略组提示命名空间占用的解决方法   对于从事windows系统安全与windows资深用户来说,对windows系统中的组策略编辑器并不陌生,用户通过组策略编辑器能够对系统进行相应的配置设置,以及做相应的系统屏蔽,而在近期有部分win10用户在修改组策略编辑器时,系统出现命名空间已经被定义为存储中另一文件的目标命名空间的对话框提示...

经验教程

335

收藏

49
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部