当我运行下面的代码片段时,输出是a is 6。但是因为我使用了命名空间 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<<"a is "<<n1::a;输出符合预期,即 5. using namespace 的目的是什么?
最佳答案
using
指令提示编译器应该搜索名称 a
的位置。
这样,名称查找将按以下顺序完成:
- 首先在本地范围内搜索
a
- 如果未找到
a
,则在命名空间n1
中搜索 - 如果仍然没有找到
a
,则在全局命名空间中查找
如果没有您提供的 using
指令,则不会执行第二步。
在你的例子中,因为实际上有一个名为 a
的变量(但它可以是任何东西,我们谈论的是 names),所以它不会去任何进一步。
关于c++ - 理解 C++ 中的命名空间作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16776293/