zoukankan      html  css  js  c++  java
  • c++命名空间

      http://www.jizhuomi.com/software/289.html转自

     命名空间的意义

           为什么需要将函数定义在命名空间中呢?这其实是为了避免变量或函数重命名的问题。试想,一个项目组内多个工程师进行开发,有可能会出现全局变量或函数重名的现象,而如果每个人都定义了自己的命名空间,就可以解决这个问题,即使重名,只要分属不同的命名空间就不会引起问题。

           这样大家应该明白了,命名空间就是将多个变量和函数等包含在内,使其不会与命名空间外的任何变量和函数等发生重命名的冲突。

           命名空间实例

           下面鸡啄米给出一个使用命名空间的实例。实例中有两个命名空间JiZhuoMi和Software,他们中都有一个名为szUrl的字符串,我们试着访问并输出这两个字符串。

    C++代码
    1. #include <iostream>  
    2. using namespace std;  
    3.   
    4. // 命名空间JiZhuoMi  
    5. namespace JiZhuoMi  
    6. {  
    7.     char *szUrl = "www.jizhuomi.com";  
    8. }  
    9.   
    10. // 命名空间Software  
    11. namespace Software  
    12. {  
    13.     char *szUrl = "www.jizhuomi.com/software/";  
    14. }  
    15.   
    16. int _tmain(int argc, _TCHAR* argv[])  
    17. {  
    18.     cout << JiZhuoMi::szUrl << endl;  // 输出命名空间JiZhuoMi中的字符串  
    19.     cout << Software::szUrl << endl;  // 输出命名空间Software中的字符串  
    20.     return 0;  
    21. }  

           此实例运行结果如下图:

    详解C++中命名空间的意义和用法

           我们看到,使用“命名空间::标识符名称”的方式就可以访问命名空间中的变量或函数了,而且即使是重复命名也可以正确访问。

           using namespace *;的意义

           在上面的实例中,我们访问命名空间JiZhuoMi和Software中的字符串变量时,都需要在前面加上“命名空间::”,但cout定义在命名空间std中,前面却不需要加“std::”,这是因为上面这样一条语句“using namespace std;”。

           using namespace *;(这里的*表示可以是任何命名空间)的作用是释放命名空间*中的变量或函数等,使之在被访问时可以不必加“命名空间::”,访问方法与一般的变量或函数无异,就像上面的cout一样。

           using namespace *;会给我们书写程序带来方便,但也要慎用,如果释放了多个命名空间中的东西后,它们又可能会引起命名冲突。鸡啄米给大家演示下同时释放JiZhuoMi和Software命名空间的情况。

    C++代码
    1. #include <iostream>  
    2. using namespace std;  
    3.   
    4. // 命名空间JiZhuoMi  
    5. namespace JiZhuoMi  
    6. {  
    7.     char *szUrl = "www.jizhuomi.com";  
    8. }  
    9.   
    10. // 命名空间Software  
    11. namespace Software  
    12. {  
    13.     char *szUrl = "www.jizhuomi.com/software/";  
    14. }  
    15.   
    16. // 释放命名空间JiZhuoMi和Software  
    17. using namespace JiZhuoMi;  
    18. using namespace Software;  
    19.   
    20. int _tmain(int argc, _TCHAR* argv[])  
    21. {  
    22.     cout << szUrl << endl;    // 这里会提示编译错误   
    23.     return 0;  
    24. }  

           上例中,编译器会提示编译错误,因为它不知道该访问哪个命名空间中的字符串变量szUrl。这时要想正确访问,还需在szUrl前面加上命名空间修饰。

           而如果main函数中又定义了一个局部变量szUrl呢?

    C++代码
    1. #include <iostream>  
    2. using namespace std;  
    3.   
    4. // 命名空间JiZhuoMi  
    5. namespace JiZhuoMi  
    6. {  
    7.     char *szUrl = "www.jizhuomi.com";  
    8. }  
    9.   
    10. // 命名空间Software  
    11. namespace Software  
    12. {  
    13.     char *szUrl = "www.jizhuomi.com/software/";  
    14. }  
    15.   
    16. // 释放命名空间JiZhuoMi和Software  
    17. using namespace JiZhuoMi;  
    18. using namespace Software;  
    19.   
    20. int _tmain(int argc, _TCHAR* argv[])  
    21. {  
    22.     char *szUrl = "url";  
    23.     cout << szUrl << endl;  
    24.     return 0;  
  • 相关阅读:
    python基础--(hashlib,configparser,logging)模块功能
    java发送邮件
    Struts2和SpringMVC的action是单例还是原型的?
    HashSet存储过程中如何排除不同的自定义对象?
    使用win32Diskimager后恢复U盘(合并U盘容量)
    linux进程与端口
    centos 7.6 忘记root密码
    Authentication token is no longer valid; new one required You (oracle) are not allowed to access to (crontab) because of pam configuration.
    存储过程
    oracle extract()函数
  • 原文地址:https://www.cnblogs.com/8335IT/p/5900997.html
Copyright © 2011-2022 走看看