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++执行内存memcpy效率测试的分析

    基于C++执行内存memcpy效率测试的分析

    本篇文章对C++中执行内存memcpy的效率进行了分析测试。需要的朋友参考下
    2013-05-05
  • 解析C++的线性表链式存储设计与相关的API实现

    解析C++的线性表链式存储设计与相关的API实现

    这篇文章主要介绍了解析C++中的线性表链式存储设计与相关的API实现,文中的实例很好地体现了如何创建和遍历链表等基本操作,需要的朋友可以参考下
    2016-03-03
  • C++轻松实现字符串与字符数组的相互转换

    C++轻松实现字符串与字符数组的相互转换

    本文详细介绍了如何在C++中通过c_str()和strcpy()函数将字符串转换为字符数组,以及使用for循环、+运算符、重载=和内置构造函数将字符数组转换为字符串的方法,需要的朋友可以参考下
    2025-03-03
  • C语言中的各种文件读写方法小结

    C语言中的各种文件读写方法小结

    这篇文章主要介绍了C语言中的各种文件读写方法小结,是C语言入门学习中的基础知识,需要的朋友可以参考下
    2015-07-07
  • Qt控件之QLabel用法及技巧

    Qt控件之QLabel用法及技巧

    QLabel是Qt中的一个控件类,用于显示文本或图像的控件类之一,本文主要介绍了Qt控件之QLabel用法及技巧,具有一定的参考价值,感兴趣的可以了解一下
    2023-10-10
  • QT基于TCP网络聊天室

    QT基于TCP网络聊天室

    这篇文章主要为大家详细介绍了QT基于TCP网络聊天室,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • C++利用socket传输大文件的实现代码

    C++利用socket传输大文件的实现代码

    这篇文章主要为大家详细介绍了C/C++如何使用socket传输大文件的实现代码,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下
    2023-10-10
  • C++11/14 线程调用类对象和线程传参的方法

    C++11/14 线程调用类对象和线程传参的方法

    这篇文章主要介绍了C++11/14 线程调用类对象和线程传参的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • C++中的整型

    C++中的整型

    这篇文章我们来聊聊C++中的整型,整型即整数,与小数对应。许多语言只能表示一种整型(如Python),而在C++当中根据整数的范围提供了好几种不同的整型,下面文章我们就来看看具体是哪几种,需要的朋友也可以参考一下
    2021-11-11
  • 从c++标准库指针萃取器谈一下traits技法(推荐)

    从c++标准库指针萃取器谈一下traits技法(推荐)

    本篇文章基于gcc中标准库源码剖析一下标准库中的模板类pointer_traits,并且以此为例理解一下traits技法,对c++ traits技法源码分析感兴趣的朋友跟随小编一起看看吧
    2021-07-07

最新评论