C++命名空间详解

本文详细解释了C++中的命名空间概念,包括其定义、特点、使用方法以及注意事项,强调了命名空间在避免命名冲突中的重要性,并提到了在实际项目中的最佳实践。
摘要由CSDN通过智能技术生成

C++命名空间详解

一、什么是命名空间?

举例:
命名空间就像一栋刚建好的教学楼,每个教室都差不多,而且还没有贴门牌号,只知道这个教学楼叫工科楼,然后学校安排学生去上课,结果学生们只能站在教学楼外玩手机,因为他们也不知道该去那间教室。学校为了解决这个问题,立马喊人为每间教室贴了门牌号,如101(表示一楼一号教室)、102、103… 这里的101等门牌号我们就可以理解为命名空间。

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

二、 命名空间的定义

定义:
定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。
举例:

namespace N
{

}

三、命名空间的特点

1、命名空间中可以定义变量、函数、类型

例如:

namespace N1
{
   //变量
   int sum=1;
   //函数
   void Add(int a,int b)
   {
     return a+b;
   }
   //结构体
   struct Node
   {
     struct Node* code;
     int val;
   }
}

2、命名空间可以嵌套

例如:

namespace N2
{
   namespace N4
   {
     namespace N5
     {
       .......    //一般嵌套两层
     }
   }
   
}

3、同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中。

例如:

//test.h
namespace N
{
   
int Mul(int left, int right)
 {
     return left * right;
 }
}
//test.c
namespace N
{
   
int Mul(int left, int right)
 {
     return left * right;
 }
}

最终一个工程中的test.h和上面test.cpp中两个N会被合并成一个。

四、命名空间的使用

1、加命名空间名称及作用域限定符(:😃

举例:


namespace N
{
int a=1;
}

int main()
{
   printf("%d\n",**N::a**);
   return 0;
}

2、使用using将命名空间中某个成员引入

举例:

namespace N
{
  int a=1;
}
using N::a;
int main()
{
  printf("%d\n",a);
  return 0;
  }

3、 使用using namespace 命名空间名称 引入

举例:

namespace N
{
  int a=1;
}
using  namespace N;
int main()
{
  printf("%d\n",a);
  return 0;
}

五、命名空间使用的细节

1. 在日常练习中,建议直接using namespace std即可,这样就很方便。
2. using namespace std展开,标准库就全部暴露出来了,如果我们定义跟库重名的类型/对象/函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 + using std::cout展开常用的库对象/类型等方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值