0

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

//header
#ifndef ASD_H
#define ASD_H

namespace Goo
{
    int var;
}
#endif

这个头文件我将包含在所有.cpp需要访问命名空间的文件中。这不起作用。这是如何正确完成的?

4

1 回答 1

3

默认命名空间是全局命名空间。只是不要显式添加namespace代码。

话虽如此,您之所以这么问,是因为您不了解命名空间的工作原理。他们的工作是清除范围。它们不是对象。它们不指向任何记忆。他们像那样非常“柔软”。任何文件都可以声明一个命名空间,并且出现在其中的任何类、结构、函数等都将成为该命名空间的一部分。不同的文件不需要通信它们共享相同的命名空间;如果文本相同,则它是相同的命名空间。

回复您的评论:

namespace One {
    intvar1;
}

namespace Two {
    int var2;
}

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

此外,您可以使用namespace Base::One或者Base::Two如果您有一个通用的基本命名空间。

于 2013-03-14T17:49:15.187 回答