【C++入门】命名空间的定义与使用


1 命名空间

在C/C++中,变量、函数和类都是大量存在的,这些变量、函数、类的名称将都存在于全局作用域中,可能会导致很多冲突。 使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。

C语言中命名冲突示例:

命名测试

如上图所示:在左部分代码中,我们没有包含头文件stdlib.h,运行后正常输出了全局变量 rand 的值;而在右部分代码中,我们包含了头文件stdlib.h,此时再运行程序,报错说明 rand 发生了重定义,之前的 rand 是被定义为一个函数。显然,这是因为 rand 是stdlib.h中声明的库函数,当我们在包含了stdlib.h头文件的同时又声明了与函数同名的 rand 全局变量时就会发生命名冲突,进而导致程序无法正常运行。

命名冲突通常发生于以下几种情况:

  • 我们自己定义的变量、函数、类与库里的名字发生命名冲突。
  • 在项目组中,多个人之间定义的名字发生冲突。可能单个人运行自己的代码时是正常的,可当将多人的代码进行合并后,运行就发生了命名冲突。

命名冲突问题是C语言的一个缺陷,在C语言中没有办法很好解决这个问题。因此,C++在C语言的基础上增加了命名空间的概念以解决这个问题。

在认识命名空间之前,我们先了解一个相对于C语言C++中新增的操作符:域操作符(域作用符) :: (双冒号),当全局变量与某个函数中的局部变量重名时,即可用 :: 来区分,表示要使用哪个域中的同名变量。如下示例:当函数中定义有与全局变量同名的变量时,默认情况下,调用函数会优先使用函数中的同名局部变量;如果想要在该函数中使用同名全局变量,则需要用域作用符 :: 来修饰变量(格式如下图代码中所示),当域作用符左边无其它名称时(如命名空间),则默认表示全局域,使用全局变量。

域作用符使用示例


1.1 命名空间定义

定义一个命名空间实际上就是定义一个域,命名空间中的所有内容都局限于该空间中。命名空间的定义只影响使用,不影响生命周期。定义命名空间需要使用 namespace 关键字。后跟空间名字,然后接一对 {} 即可, {} 中即为命名空间中的成员。

定义方式:

  • 正常命名空间定义
    namespace (域名或空间名)
    {
    {\kern 8pt} //命名空间中的成员:可以定义变量、函数、类。如下例:
    {\kern 8pt} int rand = 10; //全局变量
    {\kern 8pt} //函数
    {\kern 8pt} int Add(int num1, int num2)
    {\kern 8pt} {
    {\kern 16pt}
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大米饭_Mirai

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值