📜  在C++中使用整个名称空间的缺点

📅  最后修改于: 2021-05-30 06:48:16             🧑  作者: Mango

命名空间是一个声明性区域,它为其中的标识符(类型,函数,变量等的名称)提供范围。命名空间用于将代码组织到逻辑组中,并防止可能发生的名称冲突,尤其是当您的代码库包含多个库时。

有关详细信息,请参考C++中的名称空间需求。

假设我们为一个软件项目需要两个头文件:
1:Header1.h
-名称空间一

2:Header2.h
-名称空间二

C++代码:

Header1.h:

namespace one
{
    /*Function to print name of the namespace*/
    void print()
    {
        std :: cout << "This is one" << std :: endl;
    }
}

Header2.h

namespace two
{
    /*Function to print name of the namespace*/
    void print()
    {
        std :: cout << "This is two" << std :: endl;
    }
}

源代码文件

/*Including headers*/
#include 
#include "Header1.h"
#include "Header2.h"
  
/*Using namespaces*/
using namespace std;
using namespace one;
using namespace two;
  
/*Driver code*/
int main()
{
    /*Ambiguity*/
    print();
}

输出:

Error: Call of overloaded print() is ambiguous.

为了克服这种情况,我们独立使用命名空间对象
通过范围解析运算符。

源代码文件

/*Including headers*/
#include 
#include "Header1.h"
#include "Header2.h"
  
/*Driver code*/
int main()
{
    /*Using function of first header*/
    one :: print();
      
    /*Using function of second function*/
    two :: print();
}

参考 :
http://www.cplusplus.com/forum/beginner/25538/
https://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice

命名空间的高级子域: https : //www.geeksforgeeks.org/namespace-in-c-set-2-extending-namespace-and-unnamed-namespace/https : //www.geeksforgeeks.org/namespace-c -set-3-creating-header-nesting-aliasing-accessing /

GeeksforGeeks命名空间档案

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”