• C++命名空间知识点总结


    引入

    在 C++ 应用程序中。可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断所使用的是哪一个 xyz() 函数。

    因此,引入了命名空间这个概念,专门用于解决上面的问题,它可作为附加信息来区分不同库中相同名称的函数、类、变量等。使用了命名空间即定义了上下文。本质上,命名空间就是定义了一个范围。

    我们举一个计算机系统中的例子,一个文件夹(目录)中可以包含多个文件夹,每个文件夹中不能有相同的文件名,但不同文件夹中的文件可以重名。

    ,

    命名空间

    定义

    命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示:

    namespace namespace_name {
    // 代码声明
    }
    
    • 1
    • 2
    • 3

    调用

    为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,指定所使用的函数或变量时需要用到“::”操作符,“::”操作符是域解析操作符。如下所示:

    name::code;  // code 可以是变量或函数 
    
    • 1

    实例

    #include
    using namespace std;
    
    namespace myName
    {
        int x=5;
    }
    
    int main()
    {
        int x=1;
        cout<
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    输出结果为:

    1

    5

    using指令

    除了直接使用域解析操作符::,还可以采用using声明(using declaration)

    例1(常用)

    可以使用 using namespace 指令,这样在使用命名空间时就可以不用在前面加上命名空间的名称。这个指令会告诉编译器,后续的代码将使用指定的命名空间中的名称。

    #include 
    using namespace std;
     
    // 第一个命名空间
    namespace first_space{
       int a;
       void func(){
          cout << "Inside first_space" << endl;
       }
    }
    // 第二个命名空间
    namespace second_space{
       int a;
       void func(){
          cout << "Inside second_space" << endl;
       }
    }
    using namespace first_space;
    int main ()
    {
     
       // 调用第一个命名空间中的函数
       func();
       
       return 0;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    当上面的代码被编译和执行时,它会产生下列结果:

    Inside first_space 
    
    • 1

    例2

    using 指令也可以用来指定命名空间中的特定项目。例如,如果您只打算使用 first_space 命名空间中的变量a,您可以使用如下的语句:

    using first_space::a; 
    
    • 1

    随后的代码中,在使用first_space命名空间的变量a时就可以不用加上命名空间名称作为前缀,但是first_space命名空间中的其他项目仍然需要加上命名空间名称作为前缀。

    总结

    C++ 标准的命名空间为 std ,包含很多标准的定义。头文件iostream文件中定义的所有变量、函数等都位于std命名空间中,每次使用iostream中的变量或函数都需要在前面加上std::是非常麻烦的一件事,为此可直接用using声明将std中的所有变量或函数等都声明出来。 如果不用using namespace std;这一语句,则程序应该像下面这样:

    #include
    int main(){
        std::cout<<"hello world!"<
    • 1
    • 2
    • 3
    • 4
    • 5

    使用using namespace std;这一语句后,则程序应该像下面这样:

    #include
    using namespace std;
    int main(){
        cout<<"hello world!"<

命名空间的嵌套

命名空间可以嵌套,可以在一个命名空间中定义另一个命名空间,如下所示:

namespace namespace_name1 {
   // 代码声明
   namespace namespace_name2 {
      // 代码声明
   }
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可以通过使用 :: 运算符来访问嵌套的命名空间中的成员:

// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;
 
// 访问 namespace_name1 中的成员
using namespace namespace_name1; 
  • 1
  • 2
  • 3
  • 4
  • 5
// 访问 namespace_name2 中的成员
using namespace namespace_name1::namespace_name2;
 
// 访问 namespace_name1 中的成员
using namespace namespace_name1; 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 相关阅读:
    Windows电脑上的多开软件是否安全?
    探究什么是框架呢
    UNIAPP day_03(9.1)服务器端数据的异步请求
    macbook笔记本电脑内存怎么清理才能干净流畅?
    Spring(一、快速入门)
    宝塔部署nginx遇到的400错误和502错误
    lua脚本使用,单个及多个参数post请求
    为什么Python在数据分析行业备受欢迎?优势在哪?
    【算法集训专题攻克篇】第十四篇之栈
    爬虫Python
  • 原文地址:https://blog.csdn.net/m0_73879806/article/details/134279822