如果两个名称空间具有相同的变量名,会发生什么情况
What happens if two namespaces have the same variable name?
假设您有两个名称空间,并且都有一个同名的函数。如果你说你"使用"了两个名称空间,那么当你调用函数时,它使用哪个名称空间的变量?
例如:
#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() {}
^
相关文章:
- 你能重载对象变量名本身返回的内容吗
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 未初始化的变量有什么危险
- 在C/C++中将变量名定义为__00000001有什么好处吗
- C++变量名(可以将 main 声明为变量,但对于其他函数名称则不然)
- 发生注入类名时会发生什么情况?(C++)
- 正在连接的等待条件变量的线程会发生什么情况?
- 如果将变量设置为等于新对象,旧对象会发生什么情况?
- 数组的变量名和该数组的地址有什么区别?
- 删除父类时,方法局部静态变量会发生什么情况
- 当运算符尝试输入大于变量可以包含的值>>会发生什么情况?
- 当库静态链接时,静态变量会发生什么情况
- 动态链接共享库中的全局变量和静态变量会发生什么情况
- 在什么情况下afx_msg可以调用 void OnDestroy( ) 又名 CWnd:OnDestroy()
- *在变量名前面做什么
- 如果两个名称空间具有相同的变量名,会发生什么情况
- 在c++中,没有变量名的构造函数调用的生存期/作用域是什么?
- 在作用域中创建指针时,当指针超出作用域时,指向的变量会发生什么情况
- 在无限循环中删除未初始化的指针变量时会发生什么情况
- 如果使用"new"实例化对象而不将其分配给变量,会发生什么情况?