什么是命名空间

本文详细介绍了C++中命名空间的概念及其使用方法。通过实例解释了如何定义和使用命名空间来避免命名冲突,并展示了如何访问命名空间内的成员。此外,还讨论了命名空间与类的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++中引入命名空间的主要是为了处理程序中常见的命名冲突,它是由ANSI C++引入的可以由用户命名的作用域。所谓命名空间,实际上就是一个由程序设计者命名的内存区域 ,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其它全局实体分隔开来。如:

namespace ns  //指定命名空间ns
{
    int a;
    double b;

    namespace是定义命名空间所必须写的关键字,ns是用户自己指定的命名空间的名字(可以用任意的合法标识符),在花括号内是声明块,在其中声明的实体称为命名空间成员(namespace member)。现在命名空间成员包括变量a和b,注意a和b仍然是全局变量,仅仅是把他们隐藏在指定的命名空间中而已。如果在程序中要使用变量a和b,必须加上命名空间名和作用域分辨符“::”,如ns::a,ns::b。这种用法称为命名空间限定,这些名字(如ns::a)称为被限定名。

    C++中命名空间的作用类似于操作系统中的目录和文件的关系,由于文件很多,不便管理,而且容易重名,于是设立若干子目录,把文件放到不同的子目录中,不同子目录中的文件可以同名,而调用文件时应指出文件路径。

    命名空间的作用是建立一些相互分隔的作用域,把一些全局实体分隔开来,以免产生名字冲突。

    可以根据需要设置多个命名空间,每个命名空间名代表一个不同的命名空间域,不同的命名空间不能同名。这样可以把不同的库中的实体放到不同的命名空间中,或者说,用不同的命名空间把不同的实体隐蔽起来。过去我们用的全局变量可以理解为全局命名空间,独立于所有有名的命名空间之外,它是不需要用namespace声明的,实际上是由系统隐式声明的,存在于每个程序中。

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

变量(可以带有初始化)
常量
函数(可以是定义或声明)
结构体

模板
命名空间(在一个命名空间中又定义一个命名空间,即嵌套的命名空间)
例如:

namespace ns1
{
    const int RATE=0.08;
    double pay;
    double tax()
    {
        return a*RATE;
    }
    namespace ns2
    {
        int age;
    }
}
    输出命名空间ns1中的成员的数据,可以采用下面的方法:
    cout<<ns1::RATE<<endl
    cout<<ns1::pay<<endl
    cout<<ns1::tax()<<endl
    cout<<ns1::ns2::age<<endl
    可以看到命名空间的声明方法和使用方法与类差不多。但是他们之间有一点差别:声明类时在右花括号的后面有一分号,而在定义命名空间时,花括号的后面没有分号。

 

比便移植中出现的重名问题,比如微软有一个全局方法叫AddNumber()保存为命名空间Micro
Sun公司也有一个方法叫AddNumber()
保存为命名空间Sun

这样使用中可以使用Micro::AddNumber()调用微软的方法
而在C++中使用using namespace std;
则是说明需要使用std空间的中的一些方法
比如cout

如果不在头部生命在main中等地方使用std::cout才可以达到同样的效果

...你如果是在vc6中,包含#inlude<iostream.h>也是可以的
但是vs2005以后都不行了,一定要用#include<iostream> using namespace std;

 

指定下面定义的变量名字或函数名限定在std作用域中。是为了区分变量的,比如同一个文件中的代码:
using namespace std;
int x;

using namespace std1;
int x;

......

这样虽然x同名,但编译器编译时偷偷得根据不同的namespace名字,将x区分开了,方便的程序的编写。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值