定义全局命名空间

时间:2013-03-14 17:44:24

标签: c++ namespaces

如何定义全局命名空间,类似于全局变量(通过extern关键字)?我尝试了以下方法,但它不起作用:

//header
#ifndef ASD_H
#define ASD_H

namespace Goo
{
    int var;
}
#endif

这个头文件我将包含在需要访问命名空间的所有.cpp文件中。这不起作用。这是怎么做到的?

1 个答案:

答案 0 :(得分:3)

默认命名空间是全局命名空间。只是不要在代码中明确添加namespace

现在说,你问这个是因为你没有得到名称空间如何工作。他们的工作是清除范围。它们不是对象。他们没有指向任何记忆。他们非常“柔软”。任何文件都可以声明命名空间,并且其中出现的任何类,结构,函数等都将是该命名空间的一部分。不同的文件不需要通信它们共享相同的命名空间;如果文本相同,则它是相同的名称空间。

回复你的评论:

namespace One {
    intvar1;
}

namespace Two {
    int var2;
}

然后可以在其他翻译单元中访问One::var1Two::var2,就像它们不在名称空间中并且您键入var1var2一样 - 这意味着您仍然有责任在必要时声明extern等。

此外,如果您有一个公共基本命名空间,则可以使用namespace Base::OneBase::Two