namespace

作者: Gxpzy | 来源:发表于2016-11-01 13:34 被阅读37次

这是一篇译文原文地址
有时你的代码中可能会有一个叫做xyz()的函数,而另一个库中也有一个相同的xyz()函数。此时编译器无法确定你使用的是哪一个版本的xyz()
命名空间用来克服这个困难并且它作为额外信息来区分不同库中的相同名字,比如相同的函数名,类名,变量等。使用命名空间你可以定义参数在哪个命名中被定义。本质上一个命名空间定义了一个范围。

  • 定义一个命名空间
    命名空间以 namespace开始,后面紧跟着命名空间的名字,如下所示
namespace namespace_name{
    // code declarations
}
  • 调用命名空间中使能的函数或者变量,如下所示应该先考虑命名空间的名字
#include <iostream>
using namespace std;//下面再解释这个用法
// first name space
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
}
// second name space
namespace second_space{
   void func(){
      cout << "Inside second_space" << endl;
   }
}
int main () {

   // Calls function from first name space.
   first_space::func();  

   // Calls function from second name space.
   second_space::func(); 

   // Calls variable from first name space.
    cout << first_space::space << endl;   

   // Calls variable from second name space.
    cout << second_space::space << endl;

   return 0;
}
  • 使用指令
    你也可以通过直接使用using namespace来避免每次调用都要加上命名空间。这个指令告诉编译器随后的代码使用指定命名空间中的命名,此时如下所示
// first name space
namespace first_space{
    int space = 1;
    void func(){
        cout << "Inside first_space" << endl;
    }
}
// second name space
namespace second_space{
    int space = 2;
    void func(){
        cout << "Inside second_space" << endl;
    }
}
using namespace first_space;
int main () {
    
    // Calls function from specified name space.
    func();

    return 0;
}

使用指令也可以用来指定命名空间中特殊的项,例如std namespace中你只想使用cout你可以这样指定它:using std::cout
随后的代码不用再加上命名空间就可以指定cout,但是std中的其它项还是需要明显的加上std命名空间

#include <iostream>
using std::cout;
int main () {  
   
    cout << "std::endl is used with std!" << std::endl;
    
    return 0;
}
  • 不连续的命名空间定义
    一个命名空间可以被定义在不同的地方,因此一个命名空间是分开定义地方的总和,分开的部分可以在不同的文件中。
    如果命名空间的一部分需要使用在另一个文件定义的一个名字,这个名字也需要被声明,写一个下面的命名空间,要么定义一个新的命名空间要么在已有中增加元素
namespace namespace_name {
    // code declarations
}
  • 嵌套命名空间
    命名空间是可以嵌套的,你可以在一个命名空间中定义另一个命名空间
namespace namespace_name1 {
    // code declarations
    namespace namespace_name2 {
        // code declarations
    }
}

你可以使用结果操作符来获得嵌套的命名空间

// to access members of namespace_name2
using namespace namespace_name1::namespace_name2;
// to access members of namespace:name1
using namespace namespace_name1;

在以上语句中当你使用namespace_name1,namespace_name2中的元素也可以使用

#include <iostream>
using namespace std;
// first name space
namespace first_space{
    void func(){
        cout << "Inside first_space" << endl;
    }
    
    // second name space
    namespace second_space{
        void func(){
            cout << "Inside second_space" << endl;
        }
    }
}
using namespace first_space::second_space;
int main () {
    
    // This calls function from second name space.
    func();
    
    return 0;
}

相关文章

  • namespace与mount namespace

    原文:《Namespaces in operation, part 1: namespaces overview》...

  • namespace

    命名空间是一个域,这在个域中所有的类型名字必须是唯一的,不同的类型分组归入到层次化的命名空间. 命名空间的好处是:...

  • NameSpace

  • namespace

    define 1. namespace myns {}; `{}`可以省略 2. namespace myns\...

  • namespace

    命名空间。用于给一块代码指定作用域。 使用:

  • namespace

    这是一篇译文原文地址有时你的代码中可能会有一个叫做xyz()的函数,而另一个库中也有一个相同的xyz()函数。此时...

  • namespace

    namespace 不同的namespace形成逻辑上不同的项目或用户组不同cluster,代表不同的namesp...

  • Namespace

    在k8s里面,有一些group & manage resources的方式,比如Label,Namespace。 ...

  • Docker安装和Harbor高可用部署

    一、Namespace和cgroup介绍 1.1 Namespace Namespace是linux系统的底层概念...

  • PHP namespace与use

    一、namespace what is namespace namespace,命名空间,是为了解决项目多人协同开...

网友评论

      本文标题:namespace

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