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

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

易探云:买香港/美国/国内云服务器送QQ音乐绿钻豪华版1年,价值180元

易探云产品限时秒杀&QQ音乐典藏活动正在进行中!购买易探云香港/美国云服务器送QQ音乐绿钻豪华版1年,价值180元,性价比超级高。目前,有四大核心福利产品推荐:福利一、香港云服务器1核1G2M,仅218元/年起(香港CN2线路,全球50ms以内);福利二、美国20G高防云服务器1核1G5M,仅336元/年起(美国BGP线路,自带20G防御);福利三、2G虚拟主机低至58.8元/年(更有免费...

wordpress投资主题模版 白银黄金贵金属金融投资网站主题

wordpress投资主题模版是一套适合白银、黄金、贵金属投资网站主题模板,绿色大气金融投资类网站主题,专业高级自适应多设备企业CMS建站主题 完善的外贸企业建站功能模块 + 高效通用的后台自定义设置,简洁大气的网站风格设计 + 更利于SEO搜索优化和站点收录排名!点击进入:wordpress投资主题模版安装环境:运行环境:PHP 7.0+, MYSQL 5.6 ( 最低主机需求 )最新兼容:完美...

ZJI(月付450元),香港华为云线路服务器、E3服务器起

ZJI发布了9月份促销信息,针对香港华为云线路物理服务器华为一型提供立减300元优惠码,优惠后香港华为一型月付仅450元起。ZJI是原来Wordpress圈知名主机商家:维翔主机,成立于2011年,2018年9月更名为ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务,商家所选数据中心均为国内访问质量高的机房和线路,比如香港阿里云、华为...

命名空间为你推荐
木马病毒什么是木马病毒?windows优化大师怎么用Windows优化大师怎么用?人人时光机求徐智勇的时光机的歌词,百度上全是周杰轮跟五月天的,我要粤语啊雅虎社区雅虎是中国的吗无线路由器限速设置无线路由器速度如何设置?网站运营网络运营主管的主要工作职责是什么?数码资源网手机练习打字的软件今日热点怎么删除怎么删除手机百度实时热点免费免费建站可以不用钱免费做一个网站吗rewritebasehttp怎么做自动跳转https
域名注册godaddy 私服服务器租用 域名主机管理系统 hostigation greengeeks vir 漂亮qq空间 香港vps99idc 免费cdn加速 日志分析软件 怎样建立邮箱 135邮箱 域名和空间 metalink 安徽双线服务器 实惠 徐州电信 国外免费云空间 时间服务器 godaddy中文 更多