3

When I run this below code snippet, the output is a is 6. But since I have used namespace n1, which also has variable by name "a", shouldn't the output be a is 5. Am I missing something ?

#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;
}

But if I use fully qualified name in cout i.e cout<<"a is "<<n1::a; the output is as expected i.e. 5. What is the purpose of using namespace ?

4

3 回答 3

3

using指令是对编译器应该搜索名称的地方的提示a

这样,名称查找将按以下顺序完成:

  • 首先a在本地范围内搜索
  • 如果a没有找到,在命名空间中搜索n1
  • 如果仍然没有a找到,请查看全局命名空间

如果没有using您提供的指令,将不会执行第二步。

在您的情况下,由于实际上有一个名为的变量(但它可以是任何东西,我们正在谈论namesa,所以它不会再进一步​​了。

于 2013-05-27T15:34:28.467 回答
2

规则很简单:
“局部变量总是隐藏/隐藏其他命名空间中的变量或同名的全局变量。”

a声明局部变量的范围内, using 指令对符号名称无效a。它仍然会从n1当前范围内的命名空间导入所有符号名称,但局部变量a仍然隐藏n1::a。所以n1::a根本不可见,您需要为其使用完全限定的名称。

于 2013-05-27T15:32:19.810 回答
1

当一个变量在本地命名空间中定义时(a in main 在你的本地命名空间中),它会更喜欢它。

所以在这种情况下,你必须告诉它(我想要 n1 命名空间 n1::a 中的 a)如果你删除 a 它会按预期工作......

于 2013-05-27T15:35:04.800 回答