首页 > 解决方案 > 访问嵌套命名空间中的全局变量

问题描述

我对 c++ 很陌生,并且在命名空间方面遇到了麻烦。

#include <iostream>

int x = 10;

namespace ns {
    int x = 5;

    namespace ns_nested {
        int z = x;  //z is assigned a value of 5??
    }
}


int main(){
    std::cout << ns::ns_nested::z;
}

这打印5。最初,我认为这是因为我只是将 x 的值更改为5from 10

但是,如果我将 x 的第一个声明更改为const int x = 10,它仍然会打印5

所以,我的问题是双重的:

  1. 我虽然在全局范围内声明的变量是......嗯......全局的,因为只有一个实例可供所有人使用。那么,为什么/我能够再次声明具有相同名称的变量的实例?

  2. 如果我要将值分配给全局声明z的值x而不是外部命名空间中的值,我会怎么做?

标签: c++namespaces

解决方案


1)我虽然在全局范围内声明的变量是......嗯......全局的,因为只有一个实例可供所有人使用。那么,为什么/我能够再次声明具有相同名称的变量的实例?

  namespace ns {
    int x = 5;

    namespace ns_nested {
        int z = x;  //z is assigned a value of 5??
    }
 }

这里 x 不是全局命名空间,它在命名空间 ns 下

2)如果我要将 z 的值分配给全局声明的 x 的值,而不是外部命名空间中的值,我会怎么做?

看到这个你可能会有想法

#include <iostream>

const int x = 10;

namespace ns
{
    int x = 5;

    namespace ns_nested
    {
        int z1 = ::x;    //global namespace
        int z2 = ns::x;  //ns namespace
    }
}


int main()
{
    std::cout << ns::ns_nested::z1<<std::endl;
    std::cout << ns::ns_nested::z2<<std::endl;
}

推荐阅读