命名空间C++中,头文件与命名空间的关系

命名空间  时间:2021-01-24  阅读:()

c#代码中的namespace的作用是什么?

命名空间(namespace)的作用就好比分地盘,便于集中管理,c#是完全面向对象的语言,所有对象的类型定义都必须是在某个命名空间下定义,所有的方法都必须包含类型定义中,好比人(方法)必须属于某个市(类型定义),这个市又必须属于某个省(命名空间)。

C#中的类是利用命名空间组织起来的。

命名空间提供了一种从逻辑上组织类的方式,防止命名冲突。

命名空间声明 用namespace 关键字用于声明一个命名空间。

此命名空间范围允许您组织代码并为您提供了创建全局唯一类型的方法。

namespace name { 类型定义 } 其中:在命名空间中,可以声明类、接口、结构、枚举、委托 命名空间。

如果未显式声明命名空间,则会创建默认命名空间。

该默认的命名空间(有时称为全局命名空间)。

全局命名空间中的任何标识符都可用于命名的命名空间中。

命名空间声明可以作为顶级声明出现在编译单元中,当命名空间声明作为顶级声明出现在编译单元中时,该命名空间成为全局命名空间的一个成员。

命名空间声明出现在另一个命名空间声明内时,该内部命名空间就成为包含着它的外部命名空间的一个成员。

无论是何种情况,一个命名空间的名称在它所属的命名空间内必须是唯一的。

命名空间隐式地为 public,而且在命名空间的声明中不能包含任何访问修饰符。

模块与命名空间

命名空间是用来防止命名重复的。

如你要开发一个程序,引用了别人的一个dll,这个dll里有一个类名称叫Employee,而你自己又要定义一个叫Eemployee的类,如果不加以区分,就不知道使用的是哪个类了。

所以一般变成都会先定义一个命名空间,如MyProject,在这个命名空间下的类,引用的时候都可以在前面加上命名空间,如MyProject.Employee。

C++中,头文件与命名空间的关系

###################################### 有些书说有些头文件不在std里是什么意思? ###################################### 那些书那样说会造成困惑,因为名字空间,就像函数、 结构、类等等,是用代码来表达的一种语言机制。

std(standard的缩写)是标准C++里必须存在的一个 名字空间的名字。

所有实现标准C++的编译器都 必须确保这空间的存在。

名字空间声明是这样表达的: namespace x { // 创建新名字 } x是该名字空间的名字。

头文件装代码,代码表达名字空间。

所以应该说“有些头文件的内容不在std里”。

具体的意思就是,在那些头文件里, 没有任何代码是在“namespace std { }”的括号里的。

###################################### std里包含些什么? ###################################### std里包含标准C++库里的所有名字(类名、 函数名、...)。

###################################### 为什么不用std就不能使用cout? ###################################### 不是不能使用,只是不能直接写cout,必需用空间名和 名字空间限制符作为前缀,写成std::cout。

用某个名字做名字空间声明的时候,若已有同名的 名字空间存在,就是仅仅把括号里的名字加进去, 否则先创建空间,后加入括号里的名字。

加入名字空间后的名字都是对全局空间隐藏的, 但该名字空间的名字却不隐藏(除非该空间在另一个 名字空间里)。

cout隐藏在std里,但std本身不隐藏,所以 你“#include<iostream>”了之后,不必做 使用声明便可直接用std,通过它访问cout。

若你做了使用声明,对该使用声明所处的作用域的隐藏便 被抵消(作用域的开端到声明之间的那段除外), 即不必使用空间名和名字空间限制符作为前缀。

###################################### 头文件中声明的东西为什么在使用的时候需要 先using namespace std;一下? ###################################### 你已经知道做使用声明是要讨个方便而不是一种必要。

我们作个总结性的复习吧。

(A)这简单的程序里只有全局和局部空间,没有其它的名字空间: void main( ) { std::cout << ""; // 错误:std不存在。

cout << ""; // 错误:std不存在cout就不用提了。

} (B)这个则多了一个叫std的名字空间。

std这名字也可见了: #include<iostream> void main( ) { std::cout << ""; // OK:可通过std骚扰cout。

cout << ""; // 错误:cout仍然被包在std里面,不可见。

} iostream头文件里有std的声明。

在编译之前, 预处理器会用iostream里的全部内容来代替 “#include<iostream>”这个预处理器指示符。

效果是,这程序包含iostream里的所有代码。

include是包含的意思。

包含指示是在全局空间里,所以在指示之后的任何地方, std这个名字是可见、可访问的。

(C)这个不包含声明std的代码却尝试打开std包, 落了个跟(A)一样狼狈的下场: using namespace std; void main( ) { std::cout << ""; // 错误:std不存在。

cout << ""; // 错误:std不存在cout就不用提了。

} (D)这个声明了std(曝露了std)并把std打开, 让里面的名字(cin、cout、cerr、...)跟 std一样暴露。

[相信你闭上眼都能写出这段代码了]

BGPTO独服折优惠- 日本独服65折 新加坡独服75折

BGPTO是一家成立于2017年的国人主机商,从商家背景上是国内的K总和有其他投资者共同创办的商家,主营是独立服务器业务。数据中心包括美国洛杉矶Cera、新加坡、日本大阪和香港数据中心的服务器。商家对所销售服务器产品拥有自主硬件和IP资源,支持Linux和Windows。这个月,有看到商家BGPTO日本和新加坡机房独服正进行优惠促销,折扣最低65折。第一、商家机房优惠券码这次商家的活动机房是新加坡...

ftlcloud9元/月,美国云服务器,1G内存/1核/20g硬盘/10M带宽不限/10G防御

ftlcloud(超云)目前正在搞暑假促销,美国圣何塞数据中心的云服务器低至9元/月,系统盘与数据盘分离,支持Windows和Linux,免费防御CC攻击,自带10Gbps的DDoS防御。FTL-超云服务器的主要特色:稳定、安全、弹性、高性能的云端计算服务,快速部署,并且可根据业务需要扩展计算能力,按需付费,节约成本,提高资源的有效利用率。活动地址:https://www.ftlcloud.com...

wordpress外贸企业主题 wordpress经典外贸企业建站主题

WordPress经典外贸企业建站主题,经典配色扁平化简约设计+跨屏自适应移动端设备,特色外贸企业建站功能模块+在线Inquiry询单功能,更有利于Google等英文搜索优化和站点收录。采用标准的HTML5+CSS3语言开发,兼容当下的各种主流浏览器: IE 6+(以及类似360、遨游等基于IE内核的)、Firefox、Google Chrome、Safari、Opera等;同时支持移动终端的常用...

命名空间为你推荐
郭彩妮介紹點好聽的音樂給我、大家缓冲区溢出教程溢出攻击原理中国电信互联星空电信的互联星空服务是什么?百度手写百度手写显示网易公开课怎么下载如何下载网易公开课畅想中国畅想中国发展前景畅想中国未来的中国是什么样子的QzongQZONG怎么玩?网站推广外链如何做网站推广 ,外链推广的方向在哪里?freebsd安装最近安装了FreeBSD安装的时候没创建普通用户,然后用超级用户的身份进入系统,但是超级用户只有一个#提示符,怎么在超级用户下去创建一个普通的用户了?
北京vps主机 blackfriday 搜狗12306抢票助手 华为网络硬盘 河南移动m值兑换 免费智能解析 vip域名 电信托管 华为云盘 网页提速 linode支付宝 防cc攻击 博客域名 windowsserverr2 server2008 侦探online cdn免备案空间 极域网 dbank vpn服务器架设 更多