C/C++之C++命名空间
(1)命名空间可以是不连续的而且允许多层嵌套
1、一个命名空间可以分散定义在一个文件的多个地方,分开的命名空间相互补充。
测试1
2、一个命名空间可以分散定义在多个文件中。命名空间可以不连续意味着可以用分离的接口文件和实现文件构成命名空间(类的定义和实现)。例如下面的MyClass类,虽然都在一个命名空间MyClassSpace中,但是,这仍然是两部分,不要以为在main里面会在MyClassSpace中找到变量b。
测试2
(2)命名空间的别名
测试3
(3)using 声明和using编译指令
1、使用using 声明
使用using声明后,只能使用被声明的成员。
测试4
2、使用using编译指令
使用using编译指令后,该命名空间中的所有成员就都包含到当前文件中了。
测试5
使用using namespace也有一定的坏处,如下
using全局与局部的区别
using语句可以在函数外边以全局的方式引用,例如经常出现的 using namepace std;;也可以以局部的方式出现函数中,两者的区别在于:using后的成员的作用域不同。
(5)匿名命令空间
当声明命名空间时的名称为空时,则该命名空间为匿名命名空间(unnamed namespace)。匿名的空间是C++用于替代使用static定义作用域为本编译单元的全局函数或全局变量的一种新的替代方式,匿名空间与命名的命名空间一样可以嵌套。由于匿名命名空间没有命名空间的名字,所以也无法在其它的编译单元内通过extern声明该变量,于是该变量自然也只在本编译单元内可见。可以通过::member_name引用匿名命名空间的成员。
使用匿名空间比使用static至少有两个好处:
1) 对于一组多个标识符函数只需要使用一个匿名空间来声明,不需要多次输入static。
2) 可以嵌套。这样可以在不同命名空间中使用多个同名的标识符。
在C++的标准中也建议使用匿名命名空间定义编译单元内部的全局变量,替代static。static关键词在此处被认为是过期的(deprecated)特性。
(6)std命名空间
标准C++把自己的整个库定义在std命名空间中。
C/C++之C++命名空间相关推荐
- OpenCV 笔记(04)— OpenCV2 升级到 OpenCV3/CV4 的改动(去掉 CV_前缀、使用新的前缀替换、使用新的命名空间宏)
1. 由于宏名称的变更照成的"未声明的标识符"系列问题 有时候,遇到此类问题加入一句 #include <cv.h> 便可以让 OpenCV3 或者 OpenCV4 也 ...
- 解读Python的命名空间
前面我们理解了变量.函数的作用域,现在我们再深入讨论一下Python是如何给变量.函数划分作用域的. 我们在编写Python程序的过程中,如果要使用变量和函数,都需要先对变量和函数命名后才能使用.Py ...
- C++ 笔记(03)— 命名空间(概念、定义、调用、using name 指令、嵌套命名空间)
1. 命名空间概念 在 C++ 应用程序中, 您可能会写一个名为 func() 的函数,在另一个可用的库中也存在一个相同的函数 func() .这样,编译器就无法判断您所使用的是哪一个 func() ...
- C++ 笔记(02)— 程序结构(头文件说明、命名空间、函数返回值、函数参数、注释、语句结束符、cin/cout)
先看以下代码 #include <iostream> #include <string> using namespace std;int main() // main() 是程 ...
- c++标准库 及 命名空间std
1.命名空间std C++标准中引入命名空间的概念,是为了解决不同模块或者函数库中相同标识符冲突的问题.有了命名空间的概念,标识符就被限制在特定的范围(函数)内,不会引起命名冲突.最典型的例子就是st ...
- 不同命名空间的对象二进制反序列化问题
本质上说,这并不是二进制序列化的问题,甚至不关序列化的问题. 你想要的是在两个内部结构一致但在不同命名空间(甚至不同项目)的同名类间做类型转换. 这个问题很常见,因为实际工作中经常会有此类需求,但是我 ...
- 关于命名空间namespace
虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits).接口.函数和常量. 在声明命名空间之前唯一合法的代码是用于定义源文件编码方 ...
- .NET 框架中的 WMI 命名空间
.NET 框架中的 WMI 命名空间 .NET框架中与WMI规范有关的命名空间有两个,分别是System.Management和System.Management.Instrumentation两 ...
- Namespace(命名空间)的使用
作者:飞刀 关于Namespace(命名空间)的使用常用<% @ Import Namespace="System.Data" %>,这是在引用M$为我们提供的Name ...
- 【C++】C++命名空间重定向
参见博客: namespace使用总结 命名空间的重定向的格式: namespace newName = oldName; 在caffe源码走读时,遇到namespace的重定向用法,以前没有用过,源 ...
最新文章
- GGally包绘制的几个图形
- 在CentOS/Debian/Ubuntu上编译安装最新版 GCC 8 , cmake 3 和ninja
- 屏蔽敏感词的正则表达式
- java 把char转换成int型,java如何把char型数据转换成int型数据(转)
- Spring Mvc + Easyui中根据查询结果导出文件
- boost::mpi模块sendrecv() 操作的测试
- 【Spring学习】IoC、DI、AOP入门学习
- android 复制u盘文件到手机本地_如何导出Android中的文件(把Android当做U盘)
- linux命令 recv阻塞时间,linux下close 掉socket 之后 阻塞的recv 不会立即返回
- Linux学习之在线安装mysql
- 频繁分配释放内存导致的性能问题的分析
- 【笔记】A Tutorial of Transformers_复旦大学邱锡鹏报告
- springboot毕设项目热贡文化艺术展示与定制s5g19(java+VUE+Mybatis+Maven+Mysql)
- Python 将文件夹内所有pdf转换为图片输出到指定文件夹中
- 已解决:jdk版本冲突,nested exception is java.lang.UnsupportedClassVersionError:JVMCFRE003
- 国内好用的免费DNS服务器
- springboot 整合 mqtt 实现消息订阅
- Qt获取大华摄像头监控画面(RTSP流方式)
- 【金猿产品展】亚信科技“数据探索分析平台”——深挖数据价值,助客户高效管理和经营生产...
- 关于NFT房地产:2022年你所需要知道的一切