C++命名空间使用详细介绍

目录
  • 1.前言
  • 2.定义
  • 3.using 指令
  • 4.using 声明
  • 5.嵌套的命名空间

1.前言

在c++中,为了避免代码名称上所产生冲突,引入了命名空间这个东西。

命名空间相当于划分出一定的空间,为特定的类型,函数和变量等的名称(也就是标识符)提供了一个范围。

命名空间之内的标识符访问彼此没有限制,命名空间之外的标识符可通过使用每个标识符的完全限定名来访问成员,也可通过单个标识符的using声明或命名空间中所有标识符的using指令来访问成员。

命名空间可以定义在几个不同的部分中,因此命名空间是由几个单独定义的部分组成的。一个命名空间的各个组成部分可以分散在多个文件中。

2.定义

命名空间的定义使用关键字namespace,后跟命名空间的名称。

namespace namespace_name

{

// 代码声明

}

调用带有命名空间的函数或者变量时,需要在前面加上命名空间的名称(使用完全限定名)。

namespace_name::code; // code 可以是变量或函数

样例:

#include<iostream>
using namespace std;
namespace A
{
    void func()
    {
        cout << "A" << endl;
    }
}
// 第二个命名空间
namespace B {
    void func()
    {
        cout << "B" << endl;
    }
}
int main()
{
    // 调用第一个命名空间中的函数
    A::func();
    // 调用第二个命名空间中的函数
    B::func();
    return 0;
}

结果:

3.using 指令

当使用using 指令时,便可不用加完全限定名直接访问。

这个指令会让编译器直接使用namespace里的所有名称。

样例:

#include<iostream>
using namespace std;
namespace A
{
    void func()
    {
        cout << "A" << endl;
    }
}
// 第二个命名空间
namespace B {
    void func()
    {
        cout << "B" << endl;
    }
}
using namespace B;
int main()
{
    // 只会调用第二个命名空间中的函数
    func();
    return 0;
}

结果:

4.using 声明

使用 using 声明,以将一个标识符引入范围:

#include<iostream>
using namespace std;
namespace A
{
    class a
    {
    public:
        void func()
        {
            cout << "A" << endl;
        }
    };
}
using namespace A;
A::a aa;
int main()
{
    aa.func();
    return 0;
}

结果为:

5.嵌套的命名空间

一个命名空间中可以定义另一个命名空间,一般形式为:

namespace namespace_name1 {
   // 代码声明
   namespace namespace_name2 {
      // 代码声明
   }
}

像上列代码,如果要访问namespace_name2中的成员,我们得使用::运算符来访问:

// 访问 namespace_name2 中的成员

using namespace namespace_name1::namespace_name2;

// 访问 namespace_name1 中的成员

using namespace namespace_name1;

样例:

#include<iostream>
using namespace std;
namespace A
{
    void func()
    {
        cout << "A" << endl;
    }
    // 第二个命名空间
    namespace B
    {
        void func()
        {
            cout << "B" << endl;
        }
    }
}
using namespace A::B;
int main()
{
    // 只会调用第二个命名空间中的函数
    func();
    return 0;
}

结果为:

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

(0)

相关推荐

  • C++中命名空间(namespace)详解及其作用介绍

    为什么要有命名空间 在C语言中定义了3个层次的作用域:文件(编译单元).函数和复合语句 在C++中,多了类 全局变量中不能有同名函数.变量和类 为了使同名类存在,就要加作用域,于是就有了命名空间 命名空间是什么 命名空间是ANSI C++引入的可以由用户命名的作用域,用来处理程序中常见的同名冲突 命名空间,实际上就是一个由程序设计者命名的内存区域(分类用的) 没有给命名空间分类的作用域了,同层次命名空间就不能重名了 namespace a { int b; double c; } 命名空间就是分

  • C++ namespace命名空间解析

    目录 命名空间 namespace 命名空间的定义 1. 函数定义在命名空间里 2.对全局变量使用命名空间 3.命名空间的嵌套 4.using命名空间 5.命名空间里的结构体 命名空间 namespace #include<iostream> int rand = 0; int main() { printf("%d", rand); return 0; } 上述代码一定会出现以下情况: 原因: 自己定义的rand变量为某一库函数里面已经声明过的函数,意思就是你自己定义的东

  • C++ 命名空间--namespace总结

    目录 定义 意义 名字空间的三种使用方法 匿名空间 名字空间嵌套 总结 定义 namespace 名字空间的名字{ 全局变量 类型定义 函数 } 意义 对于一个较大型的C++程序来说,需要由多个程序员相互协作编写,这样的情况下容易出现不同程序员在需要负责的程序部分使用相同名字的变量或函数,导致程序合并后出现问题.名字空间的作用,就是将不同程序员编译的程序放入相应的名字空间,每个名字空间相对独立,空间内的变量和函数名只局限于当前空间下,从而解决命名冲突的问题. 名字空间的三种使用方法 (1)作用域

  • C++的命名空间详解

    目录 C++ | C++命名空间 C++命名空间 定义命名空间 实例1: using 指令 实例2: 实例3: 不连续的命名空间 嵌套的命名空间 实例4: 实例5: 笔记: 实例6: 实例7: 总结 C++ | C++命名空间 C++命名空间 一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突. 当所有人的代码都测试通过,没有问题时,将它们结合到一起就有可能会出现命名冲突. 例如小李和小韩都参与了一个文件管理系统的开发,它们都定义了一个全局变量

  • C++ 命名空间详解

    目录 一.C++ 命名空间 1.默认NameSpace(Global&Function) 2.语法规则 1.声明 2.使用方法 3.支持嵌套 总结 一.C++ 命名空间 命名空间为了大型项目开发,而引入的一种避免命名冲突的一种机制.比如说,在一个大型项目中,要用到多家软件开发商提供的类库.在事先没有约定的情况下,两套类库可能在存在同名的函数或是全局变量而产生冲突.项目越大,用到的类库越多,开发人员越多,这种冲突就会越明显. 1.默认NameSpace(Global&Function) Gl

  • C++中的命名空间详细介绍

    目录 命名空间的特性 声明命名空间和命名空间成员 全局命名空间 不连续命名空间 嵌套命名空间 using声明和using编译指令 命名空间别名 综合代码示例 总结 命名空间的特性 首先熟悉一下命名空间的两个概念. 声明区域:可以在其中进行声明的区域,如全局文件的声明区域是文件,函数内声明的变量声明区域为代码块.潜在作用域:潜在作用域从声明点开始,到其声明区域的结尾.因此潜在作用域比声明区域小,因为变了必须定义后才能使用.这两个概念通过下图很好理解,也是编程的常识. 声明命名空间和命名空间成员 可

  • 详情介绍C++之命名空间

    目录 C++命名空间 1.概述 2.格式 3.定义范围 4.瀑布式开发格式 5.命名空间的访问方式 5.2using namespace 空间名 6.命名空间可以无限嵌套 7.权限 8.匿名命名空间 9.别名 10.编程模型 11.using语法使用 C++命名空间 1.概述 在c++中,名称(name)可以是符号常量.变量.函数.结构.枚举.类和对象等等.工程越大,名称互相冲突性的可能性越大.另外使用多个厂商的类库时,也可能导致名称冲突.为了避免,在大规模程序的设计中,以及在程序员使用各种各样

  • C++命名空间和缺省参数介绍

    一.命名空间 为什么引入命名空间 在C++中,变量.函数和类都是大量存在的,这些变量.函数和类的名称将都存在于全局作用域中,可能会导致很多冲突.使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的.     int a = 10;          int main(void)     {         int a = 10;         return 0;     } 这里一个a是全局变量,一个a是局部变量.可以编译通过

  • C++命名空间使用详细介绍

    目录 1.前言 2.定义 3.using 指令 4.using 声明 5.嵌套的命名空间 1.前言 在c++中,为了避免代码名称上所产生冲突,引入了命名空间这个东西. 命名空间相当于划分出一定的空间,为特定的类型,函数和变量等的名称(也就是标识符)提供了一个范围. 命名空间之内的标识符访问彼此没有限制,命名空间之外的标识符可通过使用每个标识符的完全限定名来访问成员,也可通过单个标识符的using声明或命名空间中所有标识符的using指令来访问成员. 命名空间可以定义在几个不同的部分中,因此命名空

  • Mybatis中SqlMapper配置的扩展与应用详细介绍(1)

    奋斗了好几个晚上调试程序,写了好几篇博客,终于建立起了Mybatis配置的扩展机制.虽然扩展机制是重要的,然而如果没有真正实用的扩展功能,那也至少是不那么鼓舞人心的,这篇博客就来举几个扩展的例子. 这次研读源码的起因是Oracle和MySQL数据库的兼容性,比如在Oracle中使用双竖线作为连接符,而MySQL中使用CONCAT函数:比如Oracle中可以使用DECODE函数,而MySQL中只能使用标准的CASE WHEN:又比如Oracle中可以执行DELETE FORM TABLE WHER

  • Java classloader和namespace详细介绍

    Java classloader和namespace详细介绍 Java虚拟机通过装载.连接和初始化一个JAVA类型,使该类型可以被正在运行的JAVA程序所使用.其中,装载就是把二进制形式的JAVA类型读入JAVA虚拟机中.连接就是把这种已经读入虚拟机的二进制形式的类型数据合并到虚拟机的运行时状态中去.连接阶段分为三个步骤-验证.准备和解析.验证确保了JAVA类型数据格式正确并适于JAVA虚拟机使用.准备负责为该类分配它所需的内存,比如为它的类变量分配内存.解析把常量池中的符号引用转换为直接引用,

  • Java规则引擎easy-rules详细介绍

    目录 简介 开始使用 引入依赖 定义规则 使用注解定义规则 使用RuleBuilder定义规则 组合规则 规则优先级 Rules API 定义事实 定义规则引擎 创建规则引擎 规则引擎参数 定义规则监听器 定义规则引擎监听器 表达式语言(EL)支持 EL提供者注意事项 通过编程的方式定义规则 通过规则描述文件定义规则 规则定义中的错误处理 实际栗子 最近在思考一个基于规则进行挑选的技术重构,想通过规则引擎进行实现,借着这个机会正好可以详细了解一下规则引擎.本篇文章将会详细介绍规则引擎easy-r

  • Vue替代vuex的存储库Pinia详细介绍

    目录 前言 Pinia介绍 1. 创建一个Pinia store 2. 访问State 3. Pinia修改数据的四种方法 4. 重置State 5. 替换state 6. 订阅状态 7. Getters 与vuex比较 Pinia的优点 前言 vue3已经发布很长一段时间了,vue官网也已经默认访问vue3的文档了.因此打算系系统统仔仔细细的学习一波 使用官方提供的脚手架工具新建一个vue3项目会发现,官方已将pinia作为默认的状态存储库提供在安装选项中了. vuex的仓库中官方也有这么一段

  • Vue状态管理库Pinia详细介绍

    目录 什么是 Pinia 如何使用 Pinia 认识 Store 定义一个store 使用 store 操作 State Getters 1. 认识和定义 Getters 2. 访问 Getters 认识和定义 Action 什么是 Pinia Pinia (西班牙语中的菠萝),本质上依然是一个状态管理的库,用于跨组件.页面进行状态共享. pinia 与 vuex 的区别: 更友好的TypeScript支持,Vuex之前对TS的支持很不友好 与 Vuex 相比,Pinia 提供了一个更简单的 A

  • Android Jetpack组件中LifeCycle作用详细介绍

    目录 Jetpack 1.那么Jetpack是什么呢 2.为何使用Jetpack 3.Jetpack与AndroidX LifeCycle 1.LifeCycle的作用 2.LifeCycle应用 1.设计组件 2.使用组件 3.总结LifeCycle的使用 Jetpack Jetpack,我觉得翻译为“飞行器”更好听,因为Google针对编程历史乱象,整理出一套组件库,帮助开发者创造更完美的应用作品.现在市面上,很多公司招聘面试要求渐渐把Jetpack看作必会技能,Google也在疯狂的安利J

  • AngularJS 执行流程详细介绍

    一.启动阶段 大家应该都知道,当浏览器加载一个HTML页面时,它会将HMTL页面先解析成DOM树,然后逐个加载DOM树中的每一个元素节点.我们可以把AngularJS当做一个类似jQuery的js库,我们通过<script>标签引入到HTML中,那么此时Angular就做为一个普通的DOM节点等待浏览器解析,当浏览器解析到这个节点时,发现它是一个js文件,那么浏览器会停止解析剩余的DOM节点,开始执行这个js(即angular.js),同时Angular会设置一个事件监听器来监听浏览器的DOM

  • Java探索之Hibernate主键生成策略详细介绍

    1.increment 由Hibernate从数据库中去除主键的最大值(每个session只取一次),以该值为基础,每次增量为1,在内存中生成主键,不依赖于底层的数据库,因此可以跨数据库. <id name="id" column="id"> <generator class="increment" /> </id> Hibernate调用org.hibernate.id.IncrementGenerator类

随机推荐