如何定义全局命名空间,类似于全局变量(通过extern
关键字)?我尝试了以下方法,但它不起作用:
//header
#ifndef ASD_H
#define ASD_H
namespace Goo
{
int var;
}
#endif
这个头文件我将包含在需要访问命名空间的所有.cpp
文件中。这不起作用。这是怎么做到的?
答案 0 :(得分:3)
默认命名空间是全局命名空间。只是不要在代码中明确添加namespace
。
现在说,你问这个是因为你没有得到名称空间如何工作。他们的工作是清除范围。它们不是对象。他们没有指向任何记忆。他们非常“柔软”。任何文件都可以声明命名空间,并且其中出现的任何类,结构,函数等都将是该命名空间的一部分。不同的文件不需要通信它们共享相同的命名空间;如果文本相同,则它是相同的名称空间。
回复你的评论:
namespace One {
intvar1;
}
namespace Two {
int var2;
}
然后可以在其他翻译单元中访问One::var1
和Two::var2
,就像它们不在名称空间中并且您键入var1
或var2
一样 - 这意味着您仍然有责任在必要时声明extern
等。
此外,如果您有一个公共基本命名空间,则可以使用namespace Base::One
或Base::Two
。