美文网首页
名字空间(namespace)

名字空间(namespace)

作者: ZayAlan | 来源:发表于2017-04-18 23:27 被阅读0次

意义

对于一个较大型的C++程序来说,需要由多个程序员相互协作编写,这样的情况下容易出现不同程序员在需要负责的程序部分使用相同名字的变量或函数,导致程序合并后出现问题。名字空间的作用,就是将不同程序员编译的程序放入相应的名字空间,每个名字空间相对独立,空间内的变量和函数名只局限于当前空间下,从而解决命名冲突的问题。

格式

 namespace 空间名 {程序块} 

使用

1. 自定义名字空间

/*zhang.h*/                                       //原编译文件
#ifndef ZHANGH
#define ZHANGH
namespace Zhang{
    void f();
    class T{
           void ZhangFunc();
    };
}
#endif
/*zhang.cpp*/                                  //使用名字空间中的变量和函数
void Zhang::f(){}                              //使用Zhang中的f()
void Zhang::g(){}                             
void Zhang::T::ZhangFunc()           //使用Zhang中的类T中的ZhangFunc()
{
} ```

include <iostream>

using namespace std;
namespace my{
int abc = 100;
class T{
...
};
}
namespace my{
void myFunc(){
cout<<"Show string!"<<endl;
}
} //实际上上面两个my名字空间为同一个my,分开写减少代码长度
int main(){
my::myFunc();
cout<<my::abc<<endl; //调用的是同一个my
return 0;
}```

2. 匿名名字空间

不命名,即namespace后不加空间名,此时在文件中只可通过特殊的地址传递方式访问其中的内容,每次编译C++自动赋予其名字,故实际上只能编译该空间一次,其具体作用后续再介绍。

3. 全局名字空间

在主文件中用到的名字空间,作用域为整个当前cpp文件,格式为

 using namespace 空间名 

典型案列

using namespace std

std 即为包含输入输出流的全局名字空间(任何空间都可作为全局名字空间使用)
使用std名字空间的程序例子如下

#include<iostream>
using namespace std;
int abc = 100;
void myFunc(){
      cout<<"Show string!"<<endl;
}
int main(){
    ::myFunc(); myFunc();                      //两句意思相同
    ::cout<<::abc<<abc<<endl;               //::cout,::abc即是cout,abc
    return 0;
}```
使用其他名字空间的例子如下

include <iostream>

using namespace std;
namspace first
{
int x = 5;
}
namspace second
{
double x =3.1416;
}
int main(){
{ //编译时不同的名字空间为限定其作用范围应该加入大括号
using namespace first;
cout<<x<<endl;
}
{
using namespace second;
cout <<x<<endl;
}
//如果不加入大括号则实际代码如下
using first::x;
cout<<x<<endl;
using second::x; //此处x与之前的x冲突,编译器无法识别,报错
cout<<x<<endl;
//
return 0;
}```

相关文章

  • 名字空间(namespace)

    意义 对于一个较大型的C++程序来说,需要由多个程序员相互协作编写,这样的情况下容易出现不同程序员在需要负责的程序...

  • 命名空间(namespace)

    命名空间,也称名称空间,名字空间。命名空间是用来组织和重构代码的。如同名字一样的意思,NameSpace(名字空间...

  • 在Python中 作用域与命名空间的坑

    1. 命名空间 1.1 什么是命名空间 Namespace命名空间,也称名字空间,是从名字到对象的映射。Pytho...

  • [C++11阅读][2-5-1]内联名字空间

    inline namespace C++11新增的内联名字空间要解决的问题是,在父名字空间定义或特化子名字空间的模...

  • 什么是QName。

    来历:qname是qualified name的简写 构成:由名字空间(namespace)前缀(prefix)以...

  • 文件系统分布式锁介绍

    1 命名空间 不同服务的锁用不同的namespace来区分,不同元数据服务上锁namespace的名字不同,元数据...

  • 2018-04-22 PHP命名空间

    解决名字冲突问题使名字更加简单清晰 通过namespace关键字建立 命名空间必须建立在程序开头 命名空间之前不能...

  • 命名空间(有待完善)

    命名空间 namespace亦称名称空间、名字空间,用于组织和重用代码。解决了不同的人写的程序变量重名的问题。例如...

  • MG --Swift扩展 命名空间

    定义命名空间:是用来组织和重用代码的。如同名字一样的意思,NameSpace(名字空间),之所以出来这样一个东西,...

  • python名称空间及作用域解析

    1.名称空间namespace 从名字到对象的一个映射(a mapping from name to object...

网友评论

      本文标题:名字空间(namespace)

      本文链接:https://www.haomeiwen.com/subject/fcnqzttx.html