命名空间(namespace)详解

1、为何使用命名空间ios

考虑一种状况,当咱们有两个同名的人,Zara,在同一个班里。当咱们须要对它们进行区分咱们必须使用一些额外的信息和它们的名字,好比这个区域,若是它们生活在不一样的区域或者它们的母亲或父亲的名字,等等。ide

  在您的C++应用程序中也会出现一样的状况。例如,您可能正在编写一些具备名为xyz()函数的代码,而且还有另外一个可用的库,它也具备相同的xyz()函数。如今编译器没法知道您在代码中引用的xyz()函数的哪一个版本。函数

  名称空间(namespace)被设计来克服这个困难,并被用做额外的信息来区分相似的函数、类、变量等等,它们在不一样的库中具备相同的名称。使用名称空间,您能够定义定义名称的上下文。本质上,名称空间定义了一个范围。spa

2、命名空间的定义设计

在C语言中只有一个全局做用域:作用域

1.C语言中全部的全局标识符共享一个做用域
2.标识符之间可能发生冲突
C++中提出了命名空间的概念:编译器

1.命名空间将全局做用域分红不一样的部分,
2.不一样命名空间中的标识符能够同名而不会发生冲突
3.命名空间能够发生嵌套
4.全局做用域也叫默认命名空间
语法:it

namespace Name
{
    namespace Internal
    {
        /*...*/
    }
    /*...*/
}
C++命名空间的使用:io

使用整个命名空间:using namespace name;
使用命名空间中的变量:using name::variable
使用默认命名空间中的变量:  ::variable
Example:编译

#include <stdio.h>
#include <iostream>
namespace First 
{
    int i = 0;
}
 
namespace Second
{
    int i = 1;
 
    namespace Internal //嵌套命名空间
    {
        struct P  //嵌套命名空间
        {
            int x;
            int y;
        };
    }
}
 
int main()
{
    using namespace First; //使用整个命名空间
    using Second::Internal::P;  //使用嵌套的命名空间
 
    printf("First::i = %d\n", i);
    printf("Second::i = %d\n", Second::i);  //使用命名空间中的变量
 
    P p = { 2, 3 };
 
    printf("p.x = %d\n", p.x);
    printf("p.y = %d\n", p.y);
 
    system("pause");
    return 0;
}
编译运行,输出结果:

 3、using指令

  可使用using namespace指令避免使用名称空间前置。该指令告诉编译器后续代码正在使用指定命名空间中的名称。

Example:

#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;
int main () {
   // This calls function from first name space.
   func();
   
   return 0;
}
编译运行,输出结果:

4、std命名空间

  下列代码能够引用cout而不预先添加命名空间:

#include <iostream>
using std::cout;
 
int main () {
   cout << "std::endl is used with std!" << std::endl;
   
   return 0;
}
编译运行,输出结果:

<本文完>

相关文章
相关标签/搜索