当我运行下面的代码片段时,输出是 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/

10-12 05:46