gpt4 book ai didi

c++ - 访问嵌套命名空间中的全局变量

转载 作者:行者123 更新时间:2023-12-01 14:48:24 25 4
gpt4 key购买 nike

我对 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 的值更改为 5来自 10 .

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

所以,我的问题是双重的:
  • 我虽然在全局范围内声明的变量是......好吧......全局,因为只有一个实例可供所有人使用。那么,为什么/我如何能够再次声明具有相同名称的变量的实例?
  • 如果我要分配 z 的值到 x 的值那是全局声明的,而不是外部命名空间中的声明,我该怎么做?
  • 最佳答案

    1) I though the variables declared in a global scope was... well... global, as in just one instance of it was available to all. So, why/how am I able to declare an instance of a variable with the same name again?


      namespace ns {
    int x = 5;

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

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

    2)If I were to assign the value of z to the value of x that was declared globally instead of the one in the outer namespace, how would I do it?



    看到这个你可能有想法
    #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;
    }

    关于c++ - 访问嵌套命名空间中的全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60924975/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com