c++ - 理解 C++ 中的命名空间作用域

标签 c++ namespaces scope

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

相关文章:

.net - 为什么 Windows.Forms 在 System 而不是 Microsoft?

java - 是否有每个选项卡都不同的 session bean(Java/JSF 托管 bean,而不是浏览器 session )

c++ - 通过显式调用构造函数(方法)构造对象

c++ - 从文件opencv中读取视频

c++ - 在forever循环或void循环中执行一次(once)吗?

namespaces - Common Lisp 是 Lisp-n 吗?

php - 在命名空间中使用关键字? - PHP

angularjs - ionic : Preserve $scope when navigate to another view

JavaScript 对象文字表示法内部变量指向

c++ - fopen/fwrite 和多线程?