c++中无名命名空间的使用
1. 命名空间作用
命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。
通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。名字空间对全局实体加以域的限制,从而合理的解决命名冲突。命名空间就是为了避免可能的名字冲突,保持代码的局部性。例:
namespace Mine
{
int a;
void f(){/*...*/}
int g() {/*...*/}
}
可用using使用命名空间中的变量
using后面的命名空间成员名必须是有命名空间限制的名字
例:
using Mine::a;
这样每次使用Mine中的成员时都必须加上using Mine::变量名,
如果Mine中的成员较多则可以直接
using namespace 命名空间名
声明了在本作用域中要用到命名空间中的成员,在使用该命名空间内的任何成员时都不必使用命名空间限定。
2. 无名命名空间
但是有时我们并不希望名字Mine被局部的环境之外知道,此时名字Mine似乎多余了,因此我们可以省去这个Mine名字 直接改写为:
namespace
{
int a;
void f(){/*...*/}
int g() {/*...*/}
}
完整:
#include<iostream>
using namespace std;
namespace
{
int a;
void f(){cout<<"a";}
int g() {return 1;}
}
int main()
{
f();cout<<endl;
cout<<g()<<endl;
}
/*
a
1
*/
定义无名命名空间后,外部即不能得知无名命名空间的成员名字,即不让外部知道我的成员名字及其调用
由于没有名字,所以其它文件无法引用,它只能在本文件的作用域内有效,
它的作用域:重无名命名空间声明开始到本文件结束。在本文件使用无名命名空间成员时不必用命名空间限定。其实无名命名空间和static是同样的道理,都是只在本文件内有效,无法被其它文件引用。
note:
- 无名命名空间允许无限定的使用其成员函数,并且为它提供了内部连接(
只有在定义的文件内可以使用) - 命名空间不需要命名,它的成员不需要限定就可以使用。
- 如果在一个文件中包含了两个相同成员的无名命名空间,其含义是不明确的,会导致重复定义的错误。
无名命名空间可以替代全局作用域的static数据成员
c++中无名命名空间的使用的更多相关文章
- C语言中的命名空间
C语言中的命名空间 命名空间是为了解决 "在相同作用域内如何区分 相同的标识符". 说明: ①只有在相同作用域的情况下才能使用到命名空间去区分标识符,在嵌套的作用域.不同的作用域区 ...
- 替换 wcf 消息传输中的 命名空间
替换 wcf 消息传输中的 命名空间,http://vanacosmin.ro/Articles/Read/WCFEnvelopeNamespacePrefix
- JavaScript中创建命名空间
引用:http://ourjs.com/detail/538d8d024929582e6200000c 在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺 ...
- Namespacing in PHP (php 中使用命名空间)
最近学习一下php的命名空间,中文文档不多,搜到一篇英文的,讲的还蛮系统的,特此翻译一下,以备以后查阅,大家有什么高见或更深刻或者 更悟透的见解希望能不吝赐教,晚辈感激不尽. 原文: http://c ...
- 在JavaScript中创建命名空间的几种写法
在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子: var sayHello = function() { return 'Hel ...
- js中创建命名空间的几种写法
在JavaScript中全局变量经常会引起命名冲突,甚至有时侯重写变量也不是按照你想像中的顺序来的,可以看看下面的例子: var sayHello = function() { return 'Hel ...
- Entity Framework中实体模型命名空间的问题
在添加一个实体数据模型的时候(就是扩展名为edmx那位)属性里明明设置了自己的命名空间,但是后台的Designer.cs命名空间生成规则却是项目的默认命名空间加edmx文件所在文件夹的名称, 是BUG ...
- 解读Python编程中的命名空间与作用域
变量是拥有匹配对象的名字(标识符).命名空间是一个包含了变量名称们(键)和它们各自相应的对象们(值)的字典.一个Python表达式可以访问局部命名空间和全局命名空间里的变量.如果一个局部变量和一个全局 ...
- 说说PHP中的命名空间相关概念
说说PHP中的命名空间相关概念 1. PHP中的命名空间是什么? 什么是命名空间?"从广义上来说,命名空间是一种封装事物的方法.在非常多地方都能够见到这样的抽象概念. 比如.在操作系统中文件 ...
随机推荐
- scrapy-CrawlSpider的rules使用规则
1.allow设置规则的方法:要能够限制在我们想要的url上面.不要跟其他的url产生相同的正则表达式即可: 2.什么情况下使用follow:如果在爬取页面的时候,需要将满足当前条件的url再进行跟进 ...
- Python 类变量
class Person: country = "大清" def __init__(self, name, gender): self.name = name self.gende ...
- Kafka实践
1. kafka发送方法 @Component@Import(KafkaAutoProperties.class)public class KafkaProducer { @Autowired pri ...
- python3+requests:get/post请求
1.get请求 (1)没有请求参数类型 response = requests.get(url='') print(response.text) (2)有请求参数的类型(键值对形式表示参数) resp ...
- datatables 多一列报错Cannot read property 'sWidth' of undefined(…)/少一列报错Cannot read property 'style' of undefined(…)
datatables 多一列报错Cannot read property 'sWidth' of undefined(…)/少一列报错Cannot read property 'style' of u ...
- C++---String类小结
本随笔是我自己在敲代码的时候一些感受,可能有的地方简略了,还有部分是融合了一点其他资料上的知识点,如有错误欢迎指出,谢谢_(:°з」∠)_ string类是C++中常用的字符串类型,比之普通的字符串要 ...
- 2017第八届蓝桥杯C/C++ B组省赛-日期问题
标题:日期问题 小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月31日.令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的 ...
- ejs-模板
我今天第一次使用,使用的时候,遇到一些问题,还好有朋友帮我一起解决; 我先说说我使用过程中遇到的问题; 在express框架中引用 app.set('views',__dirname + '/view ...
- Ubuntu add sudo
为了安全起见,ubuntu中的普通用户一般没有root权限,因此即使知道管理员密码也无法使用sudo,但这个情况可以通过加入sudoer列表或者加入sudo组来改变. 拓展: 不管使用哪种方式,使得一 ...
- 【转载】 996是没前途的!996.ICU来了,回忆我对996的态度是如何从支持变成了怀疑!
原文地址: https://www.meiqiantu.com/20138.html --------------------------------------------------------- ...