命名空间的作用

来源:https://blog.csdn.net/LF_2016/article/details/51930792

一、为什么使用命名空间

一个大型的工程往往是由若干个人独立完成的,不同的人分别完成不同的部分,最后再组合成一个完整的程序。由于各个头文件是由不同的人设计的,有可能在不同的头文件中用了相同的名字来命名所定义的类或函数,这样在程序中就会出现名字冲突。不仅如此,有可能我们自己定义的名字会与C++库中的名字发生冲突。

名字冲突就是在同一个作用域中有两个或多个同名的实体,为了解决命名冲突 ,C++中引入了命名空间,所谓命名空间就是一个可以由用户自己定义的作用域,在不同的作用域中可以定义相同名字的变量,互不干扰,系统能够区分它们。

二、什么是命名空间

命名空间是程序设计者命名的内存区域,程序设计者根据需指定一些有名字的空间域,把一些全局实体分别存放到各个命名空间中,从而与其他全局实体分隔开。

通俗的说,每个名字空间都是一个名字空间域,存放在名字空间域中的全局实体只在本空间域内有效。名字空间对全局实体加以域的限制,从而合理的解决命名冲突。

例:

namespace na

{

int a;

char c;

}

则 a和c只在na的作用域内有效。

在声明一个命名空间时,花括弧内不仅可以包含变量,而且还可以包含以下类型:

变量(可以带有初始化)

常量

函数(可以是定义或声明)

结构体

模板

命名空间(命名空间可以嵌套定义)

例:

namespace ns1

{

int a;

char c = 10;

void fun();

int Add(int a, int b)

{

return a + b;

}

namespace ns2

{

int b;

}

}

注意,如果此时想输出b,则需要指定外层和内层的命名空间

cout<<ns1::ns2::b<<endl;

三、使用命名空间成员的方法

1、在引用命名空间成员时,要用命名空间名和作用域解析符对命名空间成员进行限定,以区别不同的命名空间中同名标识符。即  命名空间名::命名空间成员名

2、还可以给命名空间取别名

例:

namespace Television

{...}

namespace Tv=Television;

则Tv就是命名空间Television的别名,在以后用到Television的地方都可以用Tv进行替换。

3、使用using命名空间成员名

using后面的命名空间成员名必须是有命名空间限制的名字。

例:using ns1::a;

以上语句表明,在using的作用域内如果使用到ns1中的成员a,则不必再用命名空间限定。在以后的程序中如果用到a,则隐含的指ns1::a。  using声明的作用域是从using语句开始,到using所在的作用域结束。要注意,在同一作用域内用using声明的不同的命名空间的成员不能有同名的成员,否则会发生重定义。

4、使用using namespace 命名空间名

第三条介绍的using命名空间成员名,一次只能声明一个命名空间成员,如果一个命名空间中有多个变量,就需要多次使用using命名空间成员名。C++中还提供了using namespace 语句来实现一次声明一个命名空间内的全部成员。

例如:

using namespace ns1;

声明了在本作用域中要用到命名空间ns1中的成员,在使用该命名空间内的任何成员时都不必使用命名空间限定。在用using namespace声明的作用域中,命名空间ns1的成员好像在全局域中声明的一样,因此不用加命名限定。

4、无名的命名空间

例:

namespace

{

void fun();

}

由于没有名字,所以其它文件无法引用,它只能在本文件的作用域内有效,它的作用域使重无名命名空间声明开始到本文件结束。在本文件使用无名命名空间成员时不必用命名空间限定。其实无名命名空间和static是同样的道理,都是只在本文件内有效,无法被其它文件引用。

5、标准命名空间

C++库的所有标识符都是在一个名为std的命名空间中定义的,或者说标准头文件(iostream)中的函数、类、对象和类模板是在命名空间std中定义的。所以在C++程序的一开始,就用using namespace对std进行全局声明。

原文地址:https://www.cnblogs.com/zzdbullet/p/9476364.html

时间: 2024-11-09 21:22:30

命名空间的作用的相关文章

XML之命名空间的作用(xmlns)

http://www.w3school.com.cn/xml/xml_namespaces.asp http://blog.csdn.net/zhch152/article/details/8191377 命名空间的作用,下面的内容是转载的,大家可以看看: 问题的出现:XML的元素名字是不固定的,当两个不同的文档使用同样的名称描述两个不同类型的元素的时候,或者一个同样的标记表示两个不同含义的内容的时候,就会发生命名冲突. 问题的解决:命名空间(Namespace),对于每一套特定应用的DTD,给

【转】XML之命名空间的作用(xmlns)

原文链接:http://blog.csdn.net/zhch152/article/details/8191377 命名空间的作用,下面的内容是转载的,大家可以看看: 问题的出现:XML的元素名字是不固定的,当两个不同的文档使用同样的名称描述两个不同类型的元素的时候,或者一个同样的标记表示两个不同含义的内容的时候,就会发生命名冲突. 问题的解决:命名空间(Namespace),对于每一套特定应用的DTD,给它一个独一无二的标志来代表,如果在XML中使用DTD中定义的元素,需将DTD的标志和元素名

ASP.Net各个命名空间及作用

(引用自hungerw的博客) 命名空间 描述 Microsoft.CSharp        支持C#语言编译和生成代码 System                            包含了基础类,用于定义类型/数组/字符串/事件/事件处理程序/异常 处理 /接口/数据类型转换/数学计算/应用程序环境管理等等. System.Coolections       包含了一组用于管理对象集合(例如列表/队列/数组/哈希表/字典等)的类 System.Data                 

命名空间的作用及编程举例

学校的人事部门保存了有关学生的部分数据(学号.姓名.年龄.住址),教务部门也保存了学生的另外一些数据(学号.姓名.性别.成绩),两个部门分别编写了本部门的学生数据管理程序,其中都用了Student作为类名.现在要求在全校的学生数据管理程序中调用这两个部门的学生数据,分别输出两种内容的学生数据.要求用c++编程,使用命名空间. 解:命名空间是用户命名的作用域,用来处理程序中常见的同名冲突. 命名空间::命名空间成员名 程序: //header1.h #pragma once #include <s

c#引用命名空间的作用

System 包含用于定义常用值和引用数据类型.事件和事件处理程序.接口.属性和处理异常的基础类和基类.其他类提供支持下列操作的服务:数据类型转换,方法参数操作,数学计算,远程和本地程序调用,应用程序环境管理以及对托管和非托管应用程序的监管. System.Collections 包含定义各种对象集合(如列表.队列.位数组.哈希表和字典)的接口和类. System.Collections.Generic 包含定义泛型集合的接口和类:泛型集合允许用户创建强类型的集合,这种集合在类型安全和性能上均优

php命名空间与可变函数

命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决 对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀. 例:项目中有两个模块:article和message board,它们各自有一个处理用户留

PHP-----TP框架----命名空间

TP框架----命名空间 命名空间,起什么作用??? [1]命名空间是一个虚拟的目录,这个文件有可能存在这个电脑里的任何一个地方,但是如果要把这个文件它的命名空间全部写成同一个那么这些文件就相当于在同一个文件夹下,命名空间相当于一个虚拟的目录,用来管理文件的,用来管理程序文件的: [2]它使用命名空间来自动加载类,也就是说,只需要use Think\Controller;就可以把Controller这个类,加载到页面来: [3]命名空间的作用:就相当于虚拟的路径,相当于虚拟的目录. 来分析一下T

PHP中的命名空间

概述 命名空间的作用是解决命名冲突 定义命名空间 虽然任意合法的PHP代码都可以包含在命名空间中,但只有以下类型的代码受命名空间的影响,它们是:类(包括抽象类和traits).接口.函数和常量. 命名空间通过关键字namespace 来声明.如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间,除了一个以外:declare关键字. 在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句.另外,所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前 同一

PHP命名空间(Namespace)初探

探完闭包[查看],再探命名空间. 对于命名空间,官方文档已经说得很详细[查看],我在这里做了一下实践和总结. 命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误.这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀. 例:项目中有两个模块:article和message board,它们各自有一个处理用户留言的类Comment.之后我可能想要增加对所有用户留言的一些信息统计功能,比如说我想得到所有留言的数量.这时候调用它