C++命名空间

﹏ヽ暗。殇╰゛Y 2022-06-14 12:21 368阅读 0赞

概述

  1. C语言中程序的全局变量作用域只有一个,所有的**全局标识符**都共享同一个作用域,在多人开发的时候,容易造成标识符冲突。C++为了解决这个问题提出了命名空间这一概念,通过命名空间把全局变量作用域划分为不同的部分,不同的命名空间中的可以相同但不产生冲突。
  2. Tips: 标识符:标识符是指常量、 变量、语句标号,用户自定义函数的名称,用户类型等等

命名空间定义

namespace name

{

//自定义的标识符

}

Tips: 1.在全局作用域也叫默认命名空间,在全局作用域定义的自定义标识符都属于默认命名空间

  1. 2.命名空间可以嵌套定义

复制代码

  1. namespace First
  2. {
  3. int i = 0;
  4. }
  5. namespace Second
  6. {
  7. int i = 1;
  8. int j = 2;
  9. namespace Internal
  10. {
  11. struct Stu
  12. {
  13. char name[30];
  14. unsigned int number;
  15. };
  16. }
  17. }

复制代码

命名空间的使用

定义了命名空间后,接下来就要使用命名空间了。由于“全局作用域”通过命名空间被划分为了多个小的全局作用域。因此,使用命名空间中的成员需要先确定成员属于哪一个命名空间。

直接使用:

  1. 命名空间名::\[命名空间名::……\]成员名;

引入:

  1. 1.引入命名空间中所用的成员:using namespace 命名空间名\[::命名空间名…\];
  2. 2.引入命名空间中的单一成员:using 命名空间名::\[命名空间名::……\]成员名;
  3. 引入用命名空间的成员之后,就可以直接使用命名空间中的成员的。这就遇到一个问题,当引入成员名称与局部成员 名称同名时,会是谁覆盖谁,还是报错?编译器两者方式都会采取。
  4. 1.当引入命名空间中所用的成员时,局部成员覆盖命名空间中的成员。
  5. 2.当引入命名空间中的单一成员时,编译器报错。

例:

复制代码

  1. #include <stdio.h>
  2. namespace First
  3. {
  4. int i = 0;
  5. }
  6. namespace Second
  7. {
  8. int i = 1;
  9. int j = 2;
  10. namespace Internal
  11. {
  12. struct Stu
  13. {
  14. char name[30];
  15. unsigned int number;
  16. };
  17. }
  18. }
  19. int main(void)
  20. {
  21. using namespace First; //引入所有成员
  22. using Second::Internal::Stu; //引入单一成员
  23. printf("i = %d\n", i); //引入后直接使用
  24. printf("i = %d\n", Second::i); //直接使用
  25. Stu stu1 = {
  26. "Jude", 1}; //引入后直接使用
  27. printf("stu1.name = %s\n", stu1.name);
  28. printf("stu1.number = %d\n", stu1.number);
  29. /**************命名空间的成员与局部变量成员的冲突测试*****************/
  30. int i; //没问题
  31. using Second::j;
  32. int j; //报错
  33. return 0;
  34. }

复制代码

命名空间的别名

  1. 引用是一个变量的别名。命名空间也是可以用别名。

定义别名:

namespace 别名 = 命名空间名

发表评论

表情:
评论列表 (有 0 条评论,368人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C++ 命名空间

    C++ 命名空间 假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们

    相关 C++命名空间

    本讲基本要求 \ 掌握:命名空间的作用及定义;如何使用命名空间。 \ 了解:使用早期的函数库 重点、难点 ◆命名空间的作用及定义;如何使用命名空间。 在学习本书

    相关 C++命名空间

    一、 为什么需要命名空间(问题提出) 命名空间是ANSIC++引入的可以由用户命名的作用域,用来处理程序中 常见的同名冲突。 在 C语言中定义了3个层次的作用域,即文件(编

    相关 C++命名空间

    命名空间支持是C++的一项特性,加入你有A和B两个地方提供的函数但是名字都叫fun(),这样使用fun()的时候,编译器就不知道该用哪个了。命名空间能够让程序员把函数封装在一个

    相关 C++命名空间

    概述       在C语言中程序的全局变量作用域只有一个,所有的全局标识符都共享同一个作用域,在多人开发的时候,容易造成标识符冲突。C++为了解决这个问题提出了命名空间这

    相关 C++命名空间

    在 C++ 中,名称( name )可以是符号常量、变量、宏、函数、结构、枚举、类和对象等等。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的 C++ 库时,这些标识

    相关 C++命名空间

    本讲基本要求      \ 掌握:命名空间的作用及定义;如何使用命名空间。      \ 了解:使用早期的函数库  重点、难点      ◆命名空间的作用及定义;