如果两个名称空间具有相同的变量名,会发生什么情况

What happens if two namespaces have the same variable name?

本文关键字:变量名 什么情况 两个 空间 如果      更新时间:2023-10-16

假设您有两个名称空间,并且都有一个同名的函数。如果你说你"使用"了两个名称空间,那么当你调用函数时,它使用哪个名称空间的变量?

例如:

#include <library1>
#include <library2>
using namespace1;
using namespace2;
int main()
{
     myfunction(); //exists in both namespaces under the same name
}

调用了哪个命名空间的函数?

如果函数在查找过程中具有相同的名称和签名(参数,而不是返回类型)(不合格),则不明确:

namespace A {   
 void fun() {
 }
}
namespace B {  
 void fun() {
 }
}
using namespace A;
using namespace B;
int main()
{
   fun(); // Ambiguous
}

亲自查看

编译器不知道哪一个应该用于预期的调用(如果你不调用任何一个,它不会抱怨)。请注意,这个问题正是名称空间所要解决的问题。您永远不应该不加区分地使用using namespace来污染全局命名空间,而且,根据经验,通常最好限定您正在使用的函数(也是为了可读性)。

myfunction的名称查找不明确,C++编译器将拒绝编译它。

例如:

namespace namespace1 {
    void myfunction() {}
}
namespace namespace2 {
    void myfunction() {}
}
using namespace namespace1;
using namespace namespace2;
int main()
{
     myfunction();
}


$ g++ t.cpp 
t.cpp: In function ‘int main()’:
t.cpp:14:17: error: call of overloaded ‘myfunction()’ is ambiguous
      myfunction();
                 ^
t.cpp:14:17: note: candidates are:
t.cpp:6:10: note: void namespace2::myfunction()
     void myfunction() {}
          ^
t.cpp:2:10: note: void namespace1::myfunction()
     void myfunction() {}
          ^