2

我想知道文件中以下代码行的含义...

首先,我有一个标准using,它使命名空间中的类对我的代码可见

using mynamespace::myclass;

然后是同一类的前向声明:

namespace mynamespace
{
    class myclass;
}

最后是另一个类的前向声明:

class myclass2;

程序员在“使用”和“前向声明”时的细微差别是什么?编写头文件时哪个更受欢迎?

4

3 回答 3

2

为了前向声明类,您不需要using指令,通常最好在标题中使用完全限定名称:

namespace mynamespace
{
    class myclass;
}

class A{
    mynamespace::myclass* ptr;

};

此外,正如jrok 所指出的,在符号的实际(前向)声明之前,您不能使用using将符号带到当前范围。

于 2013-09-16T09:44:58.547 回答
2

唯一要做的using就是使指定的符号在当前范围内可用。它与前向声明无关。

请注意,必须已经声明了指定的符号,因此如果同时使用两者,则必须先转发声明,然后将其带入当前范围。例子:

namespace mynamespace {
    class myclass;
}

namespace this_header_namespace {
    using mynamespace::myclass;
}
于 2013-09-16T09:45:22.450 回答
2

您的第一个选择无效。您只能在前向声明之后给出使用声明

namespace N { class C; } // OK, now we know that N::C exists

using N::C;              // OK, now we can type C whenever we mean N::C

前向声明引入了名称,使用声明引入了该名称的缩写(即,您可以省略命名空间限定)。

名字和姓氏的非正式类比:首先介绍一个人,然后您才能获得名字的基础。

作为准则:永远不要将 using-declarations 放入头文件中的全局范围内。这会将速记引入包含该标题的每个翻译单元,并可能导致名称冲突。

于 2013-09-16T09:47:40.367 回答