【C++】命名空间namespace详解

  1. 命名空间namespace

命名空间的作用:使用命名空间的目的是对标识符的名称进行本地化, 以避免命名冲突或名字污染。

在同一个域中不能有两个同名的定义,存在就会出现冲突报错,用namespace创建不同的命名空间域可以避免这个问题。

1.1.命名空间的定义

namespace YGH    //YGH为自定义的空间名
{
    //命名空间的成员,可定义变量、函数、类型
}
  1. 创建命名空间域,只内部成员的影响使用,不影响生命周期。

  1. 命名空间可以嵌套使用。

  1. 如果多个命名空间定义的名字相同,编译器会合并认为是一个命名空间,若此时命名空间中出现同名定义,依旧会出现冲突。此时只能修改命名空间的名字或者再嵌套一层命名空间。

  1. 一个命名空间就定义了一个新的作用域,其中的所有内容都局限在这个作用域中。

1.2.命名空间的使用

使用命名空间的方法有三种:

  1. 指定命名空间访问:就是普通的在前面使用操作符 ::

int main()
{
    printf("%d\n", YGH::a);
    return 0;    
}
  1. 全局展开:是直接使用using namespace A;(A为自定的命名空间名),因为默认不会在命名空间中搜索,加了using namespace以后就会去搜索。一般情况下不建议全局展开,因为展开后就相当于没有建立命名空间了。

using namespce YGH;
int main()
{
    printf("%d\n", a);    //a定义在命名空间YGH中
    return 0;    
}
  1. 部分展开:using struct Node A,意思是将A中的strect Node这一部分展开出来,用这一部分时不用::,相当于将struct Node放在全局,但是这样做就不能在全局定义和它同名的定义了。

using YGH::b;
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", b);    //部分展开b,可以不用::
    return 0;    
}
  1. 命名空间嵌套定义时使用的方法为 YGH1::YGH2::定义内容,意思是在YGH1命名空间中找YGH2,然后在YGH2命名空间中找自己定义的内容。

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

总结:

全局展开一般在自己练习的时候使用,实际工程中不能使用。

指定命名空间访问和部分展开可以用于实际开发。

1.2.1.命名空间使用例

______________________________
Node.h
______________________________
namespace YGH    //YGH为命名空间名称,自定义
{
    //命名空间域
    struct Node
    {
       struct Node* next;
       int val;
    };
}
______________________________
Node.cpp
______________________________
#include"Node.h"
int main()
{
    struct A::Node node1;    //使用::找到并使用命名空间域A中的结构体
    return 0;
}

1.3.std命名空间的使用

std是C++标准库的命名空间。

使用方法:

1. 在日常练习中,建议直接using namespace std即可。

2. using namespace std展开,标准库就全部展开了,如果我们定义跟库重名的类型、对

象、函数,就存在冲突问题。该问题在日常练习中很少出现,但是项目开发中代码较多、规模

大,就很容易出现。所以建议在项目开发中使用,像std::cout这样使用时指定命名空间 +

using std::cout展开常用的库对象/类型等方式。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值