c/c++语言开发共享详情介绍C++之命名空间

目录c++命名空间c++命名空间1.概述在c++中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称

目录
  • c++命名空间

              c++命名空间

              1.概述

              在c++中,名称(name)可以是符号常量、变量、函数、结构、枚举、类和对象等等。工程越大,名称互相冲突性的可能性越大。另外使用多个厂商的类库时,也可能导致名称冲突。为了避免,在大规模程序的设计中,以及在程序员使用各种各样的c++库时,这些标识符的命名发生冲突,标准c++引入关键字namespace(命名空间/免费精选名字大全空间/名称空间),可以更好地控制标识符的作用域。

              因此:命名空间的出现就是为了解决名称冲突问题

              2.格式

                namespace 空间名称  {      变量名称      .....      函数声明      .....  }    

              3.定义范围

                #include <iostream>  using namespace std;    namespace test#这是正确的命名形式  {      .....    }    int main()  {  namespace test01 #这是错误的命名形式  {        }      ....  }    

              结论:命名空间只能在全局范围内定义

              4.瀑布式开发格式

              命名空间名称相同就是同一个命名空间

                #include <iostream>  using namespace std;  namespace test  {   ....      }  namespace test #名称相同就是同一个命名空间  {      .......  }    int main()  {      ........  }    

              5.命名空间的访问方式

              5.1空间名::变量名

                #include <iostream>  using namespace std;  namespace test  {      int a = 10;  }  int main()  {      cout << test::a<<endl;            .....  }        

              5.2using namespace 空间名

                #include <iostream>  using namespace std;  namespace test  {      int a = 10;  }  using namespace test;#需要在命名空间定义之后  int main()  {      cout <<a<<endl;            .....  }        

              需要注意的是:

              在使用该语法时,需要在命名空间定义之后,否则会提示找不到。

              6.命名空间可以无限嵌套

                #include <iostream>  using namespace std;  namespace test01  {      namespace test02      {          namespace test          {              int a = 10;          }      }    }    using namespace test01::test02::test;#如果采用第二种方式的话就需要这样声明  int main()  {      cout << a << endl;    }  

              7.权限

              命名空间不存在私有的概念,都是共有的。

              这个也很好理解,因为命名空间的出现就是为了解决名称冲突的问题。仅仅只是解决这个问题而已。

              8.匿名命名空间

              原则上禁止使用匿名命名空间,出现匿名命名空间这总机制就是为了解决名称冲突

              在了解上面的基础之上,我们再来讲述下面的语法规则

              匿名命名空间中定义的变量等同于全局变量,但是再背显式调用的时候,使用原生全局变量

              相信大家看到这句话会觉得很绝望,但是呢,编程就是这样,直接看代码就对了。

                #include <iostream>  using namespace std;    int a = 10;  namespace #这就是匿名命名空间  {    int a = 20;  }  int main()  {      cout << a <<endl;      .....  }  

              大家猜一下,上面的结果是什么?是10 还是 20

              结果是编译不通过!!!提示是:变量a是不明确的符号

              正如上面所说,匿名空间中定义的变量等同于全局变量,那不就相当于定义了两个相同名称的全局变量。那不就重定义了吗

              attention:c++中不存在变量的定义和声明

              如果要想引用全局变量,那就是如下所示

                #include <iostream>  using namespace std;    int a = 10;  namespace #这就是匿名命名空间  {    int a = 20;  }  int main()  {      cout << ::a <<endl;      .....  }  

              大家猜一下,上面的结果是什么?是10还是20

              结果是10!!!

              正如上面所说,如果变量a被调用,则被调用的是原生全局变量,那就是10。

              我们说了,匿名命名空间中定义的变量就相当于全局变量,意味着如果没有定义原生全局变量,那么就可以像调用原生全局变量一样调用匿名空间中的全局变量。

                #include <iostream>  using namespace std;    namespace #这就是匿名命名空间  {    int a = 20;  }  int main()  {      cout << a <<endl;  #调用原生全局变量的方式      .....  }    

              9.别名

                #include <iostream>  using namespace std;    int a = 10;  namespace test  {    int a = 20;  }  namespace alise_test = test;#这就是给命名空间    int main()  {      cout << ::a <<endl;      .....  }  

              原则上是不推荐给标准命名空间起别名

                #include <iostream>  using namespace std;    int a = 10;  namespace test  {    int a = 20;  }  namespace alise_std = std;#这是不建议的一种做法    int main()  {      cout << ::a <<endl;      .....  }    

              10.编程模型

              使用命名空间的时候,最好还是遵循某种格式。不遵循这种方式也是可以的,对于我而言,准许某种框架的目的在于简便自己编码。

                namespace test  {      int a = 0;#变量名的定义      int add(int a , int b );  }  int test::add(int a , int b )  {      return a+b;   }

              ps:命名空间中存放的是变量初始化、函数的声明、类的声明等等,而函数的定义

              11.using语法使用

              using namespace 空间名;

              这个语句可以在程序中的任何一个地方使用

                #include <iostream>  using namespace std;    namespace test  {    int a = 20;  }  using namespace test; #test命名空间中的符号的作用域在该语句之后,该源文件之前  void hello(void)  {      using namespace test;#test命名空间中的符号的作用域在该语句之后,函数体之前        }  int main()  {      cout << a <<endl;      .....  }    

              attention:如果没有引用,命名空间里的代码块就不会被编译

              如果命名空间中有大量的符号,采用上面一种方法就不太妥当,因为实际使用到的符号也就那么几个。

                #include <iostream>  using namespace std;    namespace test  {    int a = 20;  }  using namespace test::a; #只使用test命名空间中的a变量  int main()  {      cout << a <<endl;      .....  }  

              到此这篇关于详情介绍c++之命名空间的文章就介绍到这了,更多相关c++命名空间内容请搜索<计算机技术网(www.ctvol.com)!!>以前的文章或继续浏览下面的相关文章希望大家以后多多支持<计算机技术网(www.ctvol.com)!!>!

              需要了解更多c/c++开发分享详情介绍C++之命名空间,都可以关注C/C++技术分享栏目—计算机技术网(www.ctvol.com)!

              本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

              ctvol管理联系方式QQ:251552304

              本文章地址:https://www.ctvol.com/c-cdevelopment/791041.html

              (0)
              上一篇 2021年9月9日
              下一篇 2021年9月9日

              精彩推荐