首先明确一下要使用名字空间的目的是为了防止名字冲突。

一、访问名字空间中元素的3种方式:

1、可以自己去定义一些名字空间:

namespace NameSpace1
{void  fun(){}//该fun函数是属于名字空间NameSpace1的。int x=0;//是NameSpace1里边所包含的变量。
}namespace NameSpace
{void  fun(){}//该fun函数是属于名字空间NameSpace2的。
}

2、自定义名字空间的使用:使用域解析符来调用

#include<iostream>namespace NameSpace1
{void  fun(){}//该fun函数是属于名字空间NameSpace1的。
}namespace NameSpace
{void  fun(){}//该fun函数是属于名字空间NameSpace2的。
}void fun()
{}//该fun函数是属于全局的int main()
{//使用域解析符来调用NameSpace1::fun();//我调用的是NameSpace1中的fun函数。NameSpace2::x;//使用x。 NameSpace2::fun();//我调用的是NameSpace1中的fun函数。}

3、自定义名字空间的使用:使用using语句来调用

#include<iostream>namespace NameSpace1
{void  fun(){}//该fun函数是属于名字空间NameSpace1的。
}namespace NameSpace
{void  fun(){}//该fun函数是属于名字空间NameSpace2的。
}void fun()
{}//该fun函数是属于全局的int main()
{//使用using语句来调用using namespace NameSpace1;//这样子来写之后对于main函数内部里边他既能够看到全局名字空间里边所有的函数,又能够看到NameSpace1里边所有的函数fun();//此时调用fun()函数,系统会自动分析说首先在全局名字空间里边查找没有fun()这个函数,这个时候因为使用的是using namespace NameSpace1这个时候他就会在using namespace NameSpace1里边查找fun就可以使用了。}

4、自定义名字空间的使用:使用名字空间别名

#include<iostream>namespace NameSpace1
{void  fun(){}//该fun函数是属于名字空间NameSpace1的。
}namespace NameSpace
{void  fun(){}//该fun函数是属于名字空间NameSpace2的。
}void fun()
{}//该fun函数是属于全局的int main()
{namespace ns1=NameSpace1;//相当于对NameSpace1这个长的名字,赋予一个简短的别名ns1;一个昵称。ns1::fun();//这样就是使用的是NameSpace1中的fun函数。}

注意:如果把using namespace NameSpace1放在函数外面,

#include<iostream>namespace NameSpace1
{void  fun(){}//该fun函数是属于名字空间NameSpace1的。
}namespace NameSpace
{void  fun(){}//该fun函数是属于名字空间NameSpace2的。
}void fun()
{}//该fun函数是属于全局的using namespace NameSpace1;//如果把它放在main函数外边,那么接下来我们所有的代码再去使用的时候,他都会去从全局名字空间和NameSpace1里边去查找;//PS:但是这种方式实际上是不推荐的,这样的话实际上将NameSpace1里边所有的内容都暴露给下边了,那么同样的我们会引入名字冲突,就无法起到避免名字冲突的作用。比如如果我们在一个头文件中去这样使用的话,是非常危险的,相当于所有通过include引用这个头文件的源文件都会存在名字冲突的潜在的可能性,因为我们NameSpace1里边定义的东西和全局名字里边定义的东西都可见。这个时候更容易引起冲突。
int main()
{fun();//这样就会引起冲突,因为不知道你是使用的全局名字里边的fun函数,还是使用的是NameSpace1中的fun函数。}

总结:最安全的使用方法就是使用::,这样不会出现冲突。

二:std名字空间

std是C++标准库所定义的名字空间,std里边所包含的都是C++标准库里边所包含的东西。

三、名字空间与名称改编(name mangling)

我们的整个程序在编译完了之后,会编译出.o文件,.o文件之后会进行链接,链接成可执行文件;(链接是一个连接器把各个的目标文件和源文件给他链接起来)

C++:名字空间的使用相关推荐

  1. C++引入名字空间(namespace)意义何在?为什么using namespace std会成为常用语句?

    在没有引入名字空间的概念之前,用户在一个cpp文件(即用C或C++代码写的源码文件)的开始位置一般会引入头文件,比如<stdio.h>,这里面就有已经定义好的全局变量.函数名.和类名,如果 ...

  2. python 作用域 前缀_Python 之作用域和名字空间

    作用域与名字空间 Python有一个核心概念是名字空间(namespace),namespace是一个name到object 的映射关系,Python有很多namespace,因此,在代码中如果碰到一 ...

  3. python 两个内置函数——locals 和globals(名字空间)批量以自定义变量名创建对象

    文章目录 locals 和globals(名字空间)简介 1.局部变量函数locals例子(locals 返回一个名字/值对的字典) 批量创建对象 示例1 示例2 函数内 类内 2.全局变量函数glo ...

  4. Qt中Ui名字空间以及setupUi函数的原理和实现

    Qt中Ui名字空间以及setupUi函数的原理和实现 分类: Qt GUI 2012-03-08 15:38 10514人阅读 评论(4) 收藏 举报 uiqtsignalclassdelete 用最 ...

  5. qt开发环境 - c++之无名名字空间,名字空间嵌套邻近原则(内藏外),名字空间别名

    #include <QCoreApplication> #include <iostream> using namespace std; namespace ns1 {int ...

  6. qt开发环境 - c++之输入,输出,名字空间定义,名字空间指令,名字空间声明

    #include <QCoreApplication> #include <iostream>using namespace std;//包含后就不用 std::cout了,直 ...

  7. java schema名_关于Schema的名字空间

    基本的 XML Schema 的使用就是这样,下面我们要介绍 XML Schema 的另外一个核心的部分也是 Schema 最关键的一个部分,就是关于 Schema 的名字空间( namespace ...

  8. spring声明式事务管理方式( 基于tx和aop名字空间的xml配置+@Transactional注解)

    1. 声明式事务管理分类 声明式事务管理也有两种常用的方式, 一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解. 显然基于注解的方式更简单易用,更清爽. ...

  9. 《UNIX网络编程 卷2:进程间通信(第2版)》——1.4 名字空间

    本节书摘来自异步社区<UNIX网络编程 卷2:进程间通信(第2版)>一书中的第1章,第1.4节,作者:[美]W. Richard Stevens著,更多章节内容可以访问云栖社区" ...

最新文章

  1. IE6,7,8,FF兼容总结
  2. 日常make 的小技巧
  3. 【算法与数据结构】一道检测inversion count的初级算法
  4. Netty学习笔记(一)Netty客户端源码分析
  5. delete if only one note header
  6. tinydate.js[v0.3] 新增了字符串格式化为日期对象的函数
  7. linux string
  8. php curl https_PHP FFI:一种全新的PHP扩展方式
  9. jquery系列教程8-jquery插件大全
  10. redis 数据结构笔记
  11. 042 第一章 简介
  12. Dev C++使用教程(使用Dev C++编写C语言程序)
  13. 使用python实现一个文件搜索功能,类似于Everything功能
  14. mysql封机器码,lol机器码解除(同理支持市面上任意一款游戏)解机器码
  15. 新浪微博爬虫:模拟登陆+爬取原始页面
  16. macOS Mojave(软件篇):微信 for Mac 防撤回插件(WeChatTweak-macOS)
  17. BK7256,上海博通-音视频Wi-Fi6combo-soc,内置Flash,RGB屏驱\720P
  18. 安卓手机端口号怎么查看_安卓手机里的专业模式究竟该怎么拍?
  19. Mac小教程:Mac电脑怎么安装新字体
  20. “爱心银行”让爱心增值(转自中国文明网)

热门文章

  1. CentOS 8 安装图解
  2. (14)某工业生产部门根据国家计划的安排, 拟将某种高效率的5台机器,分配给所属的3个工厂A,B,C,各工厂在获得这种机器后,可以为国家盈利的情况如表4-10所示。
  3. Windows上IDEA搭建最新Spark2.4.3源码阅读及调试的开发环境
  4. java中对Excel的创建、样式修改
  5. Java基于Quartz的定时任务调度服务(一)
  6. 机器不学习:浅析深度学习在实体识别和关系抽取中的应用
  7. MySQL 学习笔记(8)— 触发器
  8. Keil中使用宏编译来定义DEBUG输出
  9. usaco Riding the Fences(欧拉回路模板)
  10. element ui 图片控件 排序_JAVA全栈面试前端基础之四 Vue+Element框架快速开发