访问嵌套命名空间中的全局变量 我对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; } #包括 int x=10; 名称空间ns{ int x=5; 命名空间ns\u嵌套{ int z=x;//z被赋值为5°?? } } int main(){ 标准::cout

访问嵌套命名空间中的全局变量 我对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; } #包括 int x=10; 名称空间ns{ int x=5; 命名空间ns\u嵌套{ int z=x;//z被赋值为5°?? } } int main(){ 标准::cout,c++,namespaces,C++,Namespaces,1) 我认为在一个全局范围内声明的变量是…嗯…全局的,因为它的一个实例对所有人都是可用的。那么,为什么/如何才能再次声明一个同名变量的实例呢 这里x不是全局名称空间,而是在名称空间ns下 2) 如果我要将z的值赋给全局声明的x的值,而不是外部名称空间中的值,我该怎么做 看这个你可能有主意了 #include <iostream> const int x = 10; namespace ns { int x = 5; namespace ns_nested

1) 我认为在一个全局范围内声明的变量是…嗯…全局的,因为它的一个实例对所有人都是可用的。那么,为什么/如何才能再次声明一个同名变量的实例呢

这里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;
}
#包括
常数int x=10;
名称空间ns
{
int x=5;
命名空间ns\u嵌套
{
int z1=::x;//全局命名空间
int z2=ns::x;//ns名称空间
}
}
int main()
{

std::cout In
int z=x;
x
正在命名空间层次结构中搜索:首先
::ns::ns_嵌套::x
,然后
::ns::x
,然后
::x
:x
是不同的。使用namsespace的原因之一是不同的事物可以有相同的名称。我可以e我自己的
sort
函数,它不会与标准排序发生冲突,因为它们是name
std::sort
my::sort
。这里有
::x
ns::x
@Mubin-那么,为什么/如何才能再次声明具有相同名称的变量的实例呢?-你会对
int x=10产生同样的疑问吗;void fn(){int x=5;}
?这能回答你的问题吗?@Armali是的,事实上。
#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;
}