我对 C++ 中的命名空间有点困惑

问题描述 投票:0回答:1
#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 作为输出?

c++
1个回答
0
投票

因为

using namespace x
仅使
x
成为所谓的“不合格查找”的命名空间。但是,它不会使此类查找覆盖本地名称(所谓的“块作用域”)。

不幸的是,我还没有找到“首先搜索什么”的简单列表——但是,块作用域或函数参数总是掩盖更“全局”的名称。

© www.soinside.com 2019 - 2024. All rights reserved.