C++中命名空间的概念及使用详解

 更新时间:2023年08月03日 09:42:57   作者:Pin_na  
这篇文章主要介绍了C++中命名空间的概念及使用详解,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字就是针对这种问题而出现的,需要的朋友可以参考下

什么是命名空间?

字面意思来理解,命名空间主要有两个点——“名字”和“空间”。

通过这两个关键词,我给大家简单描述一下什么是命名空间(看下面↓)

举个例子:

有一个学校,世界之大无奇不有,恰恰这个学校就比较奇怪。那你可能就会问了,这个学校究竟奇怪在哪里?这个学校奇怪的就是不仅有很多生日相同的学生,还有不少同学重名重姓。然后有一天放学,学校里有人捡到了一个钱包,里面有张三的学生证,这个钱包就被送到了校长手里,校长看着学生这么懂事,对其大加赞赏,于是便打开广播同时向各班表扬了这名学生,并且让名叫张三的学生来校长办公室一趟。过了几分钟,校长打开门一看,门外站了七八个大汉,原来这些分别都是二三四各个班的张三,还有各个年级的张三,校长瞬间蒙圈,也不知道自己叫的是哪个张三了。

故事讲完了,上面的各个班级各个年级就是不同的“空间”,张三就是一个“名字”,那个蒙圈的校长自然就是编译器啦。“校长”蒙圈,程序自然就无法正常的执行了。那么为什么校长没有找到真正的张三呢?原因就在于各个空间中的变量、函数、类命名发生了冲突、命名被相互污染了,所以为了解决这种问题,我们就加入了命名空间。之后校长再要找张三,他就会在广播上喊高二三班的张三来我办公室一下,就可以精确的找到需要找的内容了。

概念

在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作 用域中,可能会导致很多冲突。

使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字 污染,namespace关键字就是针对这种问题而出现的。

定义

namespace + 命名空间名称 + { 命名空间成员 }

特点

1. 普通的命名空间

namespace N1 // N1为命名空间的名称
{
    // 命名空间中的内容,既可以定义变量,也可以定义函数
    int a;
    int Add(int left, int right)
    {
        return left + right;
    }
}

2.命名空间可以嵌套

namespace N2
{
    int a;
    int b;
    int Add(int left, int right)
    {
        return left + right;
    }
    namespace N3
    {
        int c;
        int d;
        int Sub(int left, int right)
        {
            return left - right;
        }
    }
}

3. 同一个工程中允许存在多个相同名称的命名空间(编译器会合成到同一个命名空间)

// 编译器最后会合成同一个命名空间中
namespace N1
{
    int Mul(int left, int right)
    {
        return left * right;
    }
}

一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中

命名空间的三种使用方式

1.加命名空间名称及作用域限定符

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

2.使用using将命名空间中成员引入

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

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

using namespce N;
int main()
{
    printf("%d\n", N::a);
    printf("%d\n", b);
    Add(10, 20);
    return 0;
}

到此这篇关于C++中命名空间的概念及使用详解的文章就介绍到这了,更多相关C++中的命名空间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++中二叉堆排序详解

    C++中二叉堆排序详解

    这篇文章主要介绍了C++中二叉堆排序详解,主要介绍了二叉堆排序(递归和非递归实现上沉、下沉算法),需要的朋友可以参考下
    2023-01-01
  • C语言实现高精度加减法

    C语言实现高精度加减法

    这篇文章主要为大家详细介绍了C语言实现高精度加减法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • C++线程池的简单实现方法

    C++线程池的简单实现方法

    这篇文章主要介绍了C++线程池的简单实现方法,包括了线程操作函数及相关属性的用法,需要的朋友可以参考下
    2014-09-09
  • 深入浅析STL vector用法

    深入浅析STL vector用法

    这篇文章给大家介绍 stl vector用法,主要知识点在如何恰当的使用它们的成员函数,涉及到条件函数和函数指针在迭代算法中的使用,对stl vector用法感兴趣的朋友可以参考下本文
    2015-10-10
  • 简单了解C语言中直接插入排序与直接选择排序实现

    简单了解C语言中直接插入排序与直接选择排序实现

    这篇文章主要介绍了C语言中直接插入排序与直接选择排序实现,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,需要的朋友可以参考下
    2016-03-03
  • C++实现一个简单消息队列的示例详解

    C++实现一个简单消息队列的示例详解

    消息队列在多线程的场景有时会用到,尤其是线程通信跨线程调用的时候,就可以使用消息队列进行通信。本文将利用C++实现一个简单的消息队列,感兴趣的可以了解一下
    2022-12-12
  • C++实现简易五子棋游戏

    C++实现简易五子棋游戏

    这篇文章主要为大家详细介绍了C++实现简易五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 关于CLion配置visual studio(msvc)和JOM多核编译的问题

    关于CLion配置visual studio(msvc)和JOM多核编译的问题

    这篇文章主要介绍了CLion配置visual studio(msvc)和JOM多核编译,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 详解C语言内核中的链表与结构体

    详解C语言内核中的链表与结构体

    Windows内核中是无法使用vector容器等数据结构的,当我们需要保存一个结构体数组时,就需要使用内核中提供的专用链表结构。本文分享了几个内核中使用链表存储多个结构体的通用案例,希望对你有所帮助
    2022-09-09
  • 一文带你搞懂C语言预处理宏定义

    一文带你搞懂C语言预处理宏定义

    这篇文章主要为大家详细介绍了C语言预处理宏定义#define,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-10-10

最新评论