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

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

[6.18]IMIDC:香港/台湾服务器月付30美元起,日本/俄罗斯服务器月付49美元起

IMIDC发布了6.18大促销活动,针对香港、台湾、日本和莫斯科独立服务器提供特别优惠价格最低月付30美元起。IMIDC名为彩虹数据(Rainbow Cloud),是一家香港本土运营商,全线产品自营,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非等地机房,CN2网络直连到中国大陆。香港服务器   $39/...

百星数据(60元/月,600元/年)日本/韩国/香港cn2 gia云服务器,2核2G/40G/5M带宽

百星数据(baixidc),2012年开始运作至今,主要提供境外自营云服务器和独立服务器出租业务,根据网络线路的不同划分为:美国cera 9929、美国cn2 gia、香港cn2 gia、韩国cn2 gia、日本cn2 gia等云服务器及物理服务器业务。目前,百星数据 推出的日本、韩国、香港cn2 gia云服务器,2核2G/40G/5M带宽低至60元/月,600元/年。百星数据优惠码:优惠码:30...

A400互联(49元/月)洛杉矶CN2 GIA+BGP、1Gbps带宽,全场独服永久5折优惠

a400互联是一家成立于2020年商家,主营美国机房的产品,包括BGP线路、CN2 GIA线路的云服务器、独立服务器、高防服务器,接入线路优质,延迟低,稳定性高,额外也还有香港云服务器业务。当前,全场服务器5折,香港VPS7折,洛杉矶VPS5折,限时促销!A400互联官网:https://a400.net/优惠活动全场独服永久5折优惠(续费同价):0722香港VPS七折优惠:0711洛杉矶VPS五...

命名空间为你推荐
绵阳电信绵阳电信营业厅哪家最大手机最全缓冲区溢出教程哪里可以下载黑客教程,详细网址,ghostxp3GHOSTxp sp3系统有什么优点和缺点???渗透测试网站渗透测试怎么做?不兼容WIN7 64位系统与某些软件不兼容怎么办?硬盘人500G的硬盘容量是多少啊?xp系统停止服务XP停止服务后该怎么办?免费qq空间装扮有办法免费装扮QQ空间吗??分词技术中文分词的应用srv记录SRV记录的定义
德国vps 七牛优惠码 主机点评 站群服务器 128m内存 好看的桌面背景图片 南昌服务器托管 京东商城0元抢购 河南m值兑换 169邮箱 绍兴电信 国外ip加速器 江苏双线服务器 最漂亮的qq空间 申请网站 dnspod 中国电信测速网站 百度云空间 注册阿里云邮箱 114dns 更多