嵌套命名空间:从内部命名空间访问值

时间:2014-11-11 14:01:35

标签: c++ namespaces scope

我在C ++中使用嵌套命名空间并尝试访问内部命名空间内的外部命名空间的值,但它不起作用?有人可以解释一下原因吗?

代码:

#include <iostream>
using namespace std;

namespace Test
{
    int x = 20;
    namespace InTest
    {
        int x = 30 + x;
    }
}

int main()
{
    using namespace Test::InTest;
    cout << "X = " << x << endl;
    return 0;
}

输出:

X = 30

对于上面的代码段,我期待x的值为&#39; 50&#39;但我得到了&#39; 30&#39;。有人可以解释我在这里做错了吗?

操作系统:Windows, 工具:代码块 编译器:g ++(mingw)

2 个答案:

答案 0 :(得分:0)

答案是x=30,因为您正在访问Test::InTest::x,正如using namespace声明所述。这条线

int x = 30 + x;

相当于

int x = 30 + 0;

因为Test::InTest::x的值在初始化时归零(感谢Anton)。

现在,如果您想将Test::x添加到Test::InTest::x,请说明一下。

int x = 30 + Test::x;

答案 1 :(得分:0)

int x = 30 + x;
表达式右侧的

x引用Test::InTest::x,因为它已被视为已声明。因此,在x自己的值中添加30,这在启动时等于0,因为静态对象的初始化为零(它发生在根据[basic.start.init]/2的任何其他初始化之前)。