1.Cpp中的命名空间

  • 假设这样一种情况,当一个班上有两个名叫Zara的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。同样的情况,在C++程序中,可能会写一个xyz()的函数,而在另一个可用的库中也存在一个同名的函数xyz()。这样,编译器就无法判断我们到底使用的是哪一个xyz()函数。因此,引入命名空间这个概念用于解决上面的问题,它可以作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文,本质上就是定义了一个范围

2.定义命名空间

  • 命名空间的定义使用关键字namespace,后面接着命名空间的名字,如下所示:

        namespace 命名空间的名字{// 代码声明}
    
  • 为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名字,如下所示:
        命名空间的名字::code;   // code可以是变量或函数
    
  • 使用命名空间为变量或函数等实体定义范围:
        #include "iostream"using namespace std;// 第一个命名空间namespace first_space{void func(){cout << "I come from frist space.\n";}}// 第二个命名空间namespace second_space{void func(){cout << "I come from second space.\n";}}int main(){// 调用第一个命名空间中的函数first_space::func();// 调用第二个命名空间中的函数second_space::func();return 0;}
    

3.using指令

  • 可以使用using namespace指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称,实例见下面:

        #include "iostream"using namespace std;   // 使用标准命名空间// 第一个命名空间namespace first_space{void func(){cout << "I come from frist space.\n";}}// 第二个命名空间namespace second_space{void func(){cout << "I come from second space.\n";}}// 第三个命名空间namespace third_space{void func(){cout << "I come from third space.\n";}}using namespace third_space;  // 注意这一句!!!int main(){// 调用第一个命名空间中的函数first_space::func();// 调用第二个命名空间中的函数second_space::func();// 调用第三个命名空间中的函数func(); // 注意调用格式!!!return 0;}
    
  • using指令也可以用来指定命名空间中的特定项目。如果,这只打算使用标准命名空间std中的cout部分,可以使用如下的语句:
        using std::cout;
    
  • 随后的代码中,在使用cout时就可以不用加上命名空间的名字作为前缀,但是std命名空间中的其他项目仍然需要加上命名空间的名字作为前缀,如:
        #include "iostream"using std::cout;int main(){cout << "hello world." << std::endl;   // 注意,此处的std::endl与cout的格式区别!!!return 0;}
    
  • using指令引入的命名空间的名字遵循正常的范围规则,名字从使用using指令开始是可见的,直到该范围结束。此时,在范围以外定义的同名实例是隐藏的。

4.不连续的命名空间

  • 命名空间可以定义在几个不同的部分中。因此,命名空间是由几个单独定义的部分组成的。一个命名空间的各个组成部分可以分散在多个文件中。所以,如果命名空间中的某个组成部分需要请求定义在另一个文件中的名称,则仍然需要声明该名称。下面的命名空间定义可以是定义一个新的命名空间,也可以是为已有的命名空间增加新的元素:

        namespace 命名空间的名字{// 代码声明}
    

5.命名空间的嵌套

  • 命名空间可以嵌套,可以在一个命名空间中定义另一个命名空间,如下所示:

        namespace 命名空间1的名字{// 代码声明namespace 命名空间2的名字{// 代码声明}}
    
  • 可以通过使用::运算符访问嵌套的命名空间中的成员,如下所示:
        // 访问命名空间2中的成员using namespace 命名空间1的名字::命名空间2的名字// 访问命名空间1中的成员using namespace 命名空间1的名字
    
  • 上面的语句中,如果使用的是命名空间1,那么在该范围内命名空间2中的元素也是可以使用的,如下所示:
        // 命名空间的嵌套namespace four_space{void fun(){cout << "I come from four space.\n";}namespace five_space{void fun(){cout << "I come from five space.\n";}}}using namespace four_space::five_space;using namespace four_space;int main(){// 调用第二个命名空间中的函数fun();// 调用第二个命名空间中的函数five_space::fun();return 0;}
    

C++中的命名空间namespace相关推荐

  1. 【转】C#中的命名空间namespace全解

    .NET Framework 类库提供下列命名空间: [Microsoft] Microsoft.CSharp 包含支持用 C# 语言进行编译和代码生成的类. Microsoft.JScript 包含 ...

  2. 使用mvc时,在视图view中使用强类型视图,在web.config文件中添加命名空间namespace的引用不起作用,解决方法...

    这是view中的model代码: @model t_user_info 这是web.config配置文件只的代码: <namespaces><add namespace=" ...

  3. maya中删除命名空间namespace

    思路 以:分割字符串取最后一项,然后重命名 cmds实现 import pymel.core as pm import maya.cmds as mc sel = mc.ls() for i in s ...

  4. 【C++ 语言】命名空间 ( namespace | 命名空间定义 | 命名空间嵌套 | 域作用符 | 与 include 对比 )

    文章目录 命名空间简介 自定义命名空间 自定义嵌套命名空间 域作用符 命名空间 与 include 区别 命名空间定义与使用完整代码 命名空间简介 命名空间 ( namespace ) : 1.命名空 ...

  5. 【小白学习C++ 教程】十三、C++命名空间namespace

    @Author:Runsen 文章目录 访问命名空间 嵌套命名空间 命名空间别名 任何C++程序都有声明namespace,比如下面的C++程序没有声明namespace int main() {in ...

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

    命名空间 (namespace) 可以帮助我们区分不同库中相同名称的函数, 类, 变量等. 使用了命名空间即定义了上下文. 命名空间就是定义了一个范围. 命名空间 为了解决 C++ 标准库中的标识符与 ...

  7. PHP 命名空间(namespace)

    2019独角兽企业重金招聘Python工程师标准>>> PHP 命名空间(namespace) PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Ja ...

  8. XAML实例教程系列 - 命名空间(NameSpace)

    上一篇曾提及XAML中,每个对象元素的声明是对.NET类进行一次实例化操作.XAML作为声明类语言,如何识别对象元素,并如何在.NET Framework中找到对应映射类呢?本篇将引入命名空间(Nam ...

  9. PHP命名空间(Namespace)的使用详解(转)

    对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只 ...

最新文章

  1. 压力测试的几种常见性解决方案
  2. sas table将缺失值计入百分比_医药SAS编程及应用之爱情草全部发芽啦
  3. html 数据钩子,22.钩子函数.html
  4. BCVP,想真正为社区做努力的开发者们
  5. C#编译器优化那点事
  6. 使用Quarkus调试容器中的系统测试(视频)
  7. 中国在线度假旅游市场专题分析2020
  8. 各地延迟上课,请收好这份线上教学操作指南
  9. python threading.Barrier
  10. ML算法整理(一)线性回归与梯度下降 python实现
  11. Android通讯录(一)
  12. 管理感悟:衡量境界的差异
  13. Mac/Macbook Apple ID 无法登录:验证失败,发生未知错误
  14. unity开宝箱动画_Unity动画库插件iTween介绍
  15. 【SYS/BIOS】4.2节同步模块之事件模块
  16. 怎么用计算机打印出东西,怎样在电脑上打印东西_怎么用电脑打印东西
  17. 值得品读的感悟人生的经典句子 - 格言网(转载)
  18. 三角形的几何公式大全_高中数学公式、定理大全,你所需要的这里都有!
  19. C语言求水仙花数(自幂数)
  20. 【渝粤题库】陕西师范大学151206 中级财务管理作业 (专升本)

热门文章

  1. 微信小程序弹出用户授权弹窗,微信小程序引导用户授权,获取位置经纬度
  2. Hadoop SequenceFile数据结构介绍及读写
  3. 使用jQuery的.css()和.attr()方法设置元素left属性的注意点
  4. Mysql ID重新排列
  5. 如何限制IP,通过SSH登陆linux服务器
  6. 更改windows域名
  7. 在公司中,如何提升自己的段位,脱颖而出
  8. 【图文讲解】TCP为啥要3次握手和4次挥手?握两次手不行吗?
  9. 只有15亩起源的新发地,却造就了32个亿万商家,1000多个千万商家!
  10. 手撕ArrayList底层,透彻分析源码