#include <iostream>
namespace first{
int x = 1;
}
namespace second{
int x = 2;
}
int main(){
int x = 0;
std::cout << x << std::endl;
std::cout << first::x << std::endl;
using namespace second;
std::cout << x << std::endl;
return 0;
}
这是我正在使用的代码。在此代码中,我期望 0 1 2 作为输出,但为什么我得到 0 1 0 作为输出?
因为
using namespace x
仅使x
成为所谓的“不合格查找”的命名空间。但是,它不会使此类查找覆盖本地名称(所谓的“块作用域”)。
不幸的是,我还没有找到“首先搜索什么”的简单列表——但是,块作用域或函数参数总是掩盖更“全局”的名称。