C++ namespace命名空间解析.pdf

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

命名空间namespace

#includeiostream

intrand=0;

intmain()

{

printf(%d,rand);

return0;

}

上述代码一定会出现以下情况:

原因:自己定义的rand变量为某一库函数里面已经声明过的函数,意思就是你自己定义的东西跟库

函数的东西重复了。这种错误就是命名冲突。

命名冲突问题:

我们自己定义的变量、函数可能跟库里面重名冲突。

进入公司项目组后,做的项目通常比较大,多人协作,可能命名冲突。

C语言没有办法很好的解决这个问题。

C++提出了一个新语法:命名空间

命名空间的定义

对于上面的问题我们使用命名空间来解决:

#includeiostream

namespacezzy

{

intrand=0;

}

intmain()

{

printf(%d,zzy::rand);

return0;

}

我们使用namespace来划定一个区域,叫做域,域的名字叫zzy(名字可以自己定义,但是最好不要

跟库已有的重复)。这个域就像是隐身衣一样,让系统编译的时候不会去这个区域里面读取。

::为域作用限定符,前面是命名空间的名称,后面是命名空间里的变量、类型、函数等。使用这个限

定符来指定我们使用的是哪个命名空间里的变量

需要注意的一点是,命名空间是全局的,必须要写在main函数的外边。

下面举些例子来帮大家更清晰的了解命名空间:

1.函数定义在命名空间里

#includeiostream

namespacezzy

{

intAdd(intx,inty)

{

returnx+y;

}

}

intmain()

{

printf(%d\n,zzy::Add(1,2));

return0;

}

如果把函数的定义写在命名空间的外面,而函数声明在命名空间里面会怎么样?由于命名空间会屏蔽

掉,相当于你没有写这个声明。但是如果你的函数定义写在main函数的上面就没什么问题了。

#includeiostream

namespacezzy

{

intAdd(intx,inty);

}

intAdd(intx,inty)

{

returnx+y;

}

intmain()

{

printf(%d\n,/*zzy::*/Add(1,2));

return0;

}

一点要注意,这个时候你不可以写zzy::了,因为如果你这么写的话系统会优先去zzy命名空间里去寻

找,发现只有函数的声明,没有函数的定义,所以是没结果的。

2.对全局变量使用命名空间

#includeiostream

inta=0;

intmain()

{

inta=10;

printf(%d,::a);//使用全局作用域的a,::前面的没有东西代表全局作用域

}

3.命名空间的嵌套

#includeiostream

namespacezzy

{

inta=10;

namespaceN1

{

intb=20;

}

}

intmain()

{

printf(%d\n,zzy::a);

printf(%d\n,zzy::N1::b);

}

4.using命名空间

我们发现,每次使用一些命名空间里的变量总是要加上”命名空间名称::”,当变量多时,就会显得

很繁琐。所以我们可以这么做:

文档评论(0)

152****1430 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档