簡體   English   中英

訪問嵌套命名空間中的全局變量

[英]Accessing a global variables within nested namespaces

我對 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 的值從10更改為5

但是,如果我將 x 的第一個聲明更改為const int x = 10 ,它仍然會打印5

所以,我的問題是雙重的:

  1. 我雖然在全局范圍內聲明的變量是......好吧......全局,因為只有一個實例可供所有人使用。 那么,為什么/我如何能夠再次聲明具有相同名稱的變量的實例?

  2. 如果我要將z的值分配給全局聲明的x值而不是外部命名空間中的值,我該怎么做?

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM