访问匿名命名空间内的变量(c ++)

时间:2016-09-16 12:40:38

标签: c++ static anonymous unnamed-namespace

我有以下代码,我不知道如何在此设置中访问匿名命名空间内的x。请告诉我怎么做?

#include <iostream>

int x = 10;

namespace
{
    int x = 20;
}

int main(int x, char* y[])
{
    {
        int x = 30; // most recently defined
        std::cout << x << std::endl; // 30, local
        std::cout << ::x << std::endl; // 10, global
        // how can I access the x inside the anonymous namespace?
    }

    return 0;
}

2 个答案:

答案 0 :(得分:1)

<强> You can't!

您无法通过名称访问命名空间的成员,因为它没有名称 这是匿名的。

您只能通过已被拉入范围来访问这些成员。

答案 1 :(得分:0)

您必须从匿名相同范围内的函数访问它:

#include <iostream>

int x = 10;

namespace
{
    int x = 20;
    int X() { return x; }
}

int main(int x, char* y[])
{
    {
        int x = 30; // most recently defined
        std::cout << x << std::endl; // 30, local
        std::cout << ::x << std::endl; // 10, global
        std::cout << X() << std::endl; // 20, anonymous
        // how can I access the x inside the anonymous namespace?
    }

    return 0;
}