当我运行下面的代码片段时,输出是 a is 6 。但是由于我使用了 namespace n1,它也有名称为“a”的变量,因此输出不应该是 a is 5 。我错过了什么吗?
#include <iostream>
using namespace std;
namespace n1{
int a = 5;
}
int main(void){
int a = 6;
using namespace n1;
cout<<"a is "<<a<<endl;
return 0;
}
但是,如果我在 cout 中使用完全限定名称,即 cout< n1::a ;输出符合预期,即 5. 使用命名空间 的目的是什么?
最佳答案
规则很简单:
"局部变量总是隐藏/隐藏其他命名空间中的变量或同名的全局变量。"
在声明局部变量 a
的范围内, using 指令对符号名称 a
无效。它仍然从当前范围内的命名空间 n1
导入所有符号名称,但局部变量 a
仍然隐藏 n1::a
。因此 n1::a
根本不可见,您需要为其使用完全限定名称。
关于c++ - 了解 C++ 中的命名空间范围,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16776293/