命名空间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一样暴露。

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

CloudCone:洛杉矶MC机房KVM月付1.99美元起,支持支付宝/PayPal

CloudCone是一家成立于2017年的国外VPS主机商,提供独立服务器租用和VPS主机,其中VPS基于KVM架构,多个不同系列,譬如常规VPS、大硬盘VPS等等,数据中心在洛杉矶MC机房。商家2021年Flash Sale活动继续,最低每月1.99美元,支持7天退款到账户,支持使用PayPal或者支付宝付款,先充值后下单的方式。下面列出几款VPS主机配置信息。CPU:1core内存:768MB...

香港 E5-2650 16G 10M 900元首月 美国 E5-2660 V2 16G 100M 688元/月 华纳云

华纳云双11钜惠出海:CN2海外物理服务器终身价688元/月,香港/美国机房,免费送20G DDos防御,50M CN2或100M国际带宽可选,(文内附带测评)华纳云作为一家专业的全球数据中心基础服务提供商,总部在香港,拥有香港政府颁发的商业登记证明,APNIC 和 ARIN 会员单位。主营香港服务器、美国服务器、香港/美国OpenStack云服务器、香港高防物理服务器、美国高防服务器、香港高防I...

搬瓦工:香港PCCW机房即将关闭;可免费升级至香港CN2 GIA;2核2G/1Gbps大带宽高端线路,89美元/年

搬瓦工怎么样?这几天收到搬瓦工发来的邮件,告知香港pccw机房(HKHK_1)即将关闭,这也不算是什么出乎意料的事情,反而他不关闭我倒觉得奇怪。因为目前搬瓦工香港cn2 GIA 机房和香港pccw机房价格、配置都一样,可以互相迁移,但是不管是速度还是延迟还是丢包率,搬瓦工香港PCCW机房都比不上香港cn2 gia 机房,所以不知道香港 PCCW 机房存在还有什么意义?关闭也是理所当然的事情。点击进...

命名空间为你推荐
google地球打不开google earth打不开怎么办?微信如何建群在微信里怎么创建一个群别人可以加入扫描二维码的加入怎么点亮qq空间图标如何点亮QQ空间图标宕机何谓宕机?linux虚拟机怎么样在Linux下安装虚拟机二层交换机二层交换机是什么意思,三层呢分词技术搜索引擎采用的是什么技术?srv记录SRV记录的简介系统分析员系统分析师是做什么 的虚拟机软件下载求一个免费虚拟机软件!!!请发送下载网站给我
合肥虚拟主机 美国域名注册 如何查询域名备案号 万网域名解析 ipage 华为云服务 z.com 美国主机论坛 koss 512av realvnc 论坛空间 蜗牛魔方 ftp教程 免费dns解析 空间登陆首页 starry hostease 沈阳idc 架设代理服务器 更多