繁体   English   中英

转发定义和名称空间使用

[英]Forward Definitions and namespace using

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

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

using mynamespace::myclass;

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

namespace mynamespace
{
    class myclass;
}

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

class myclass2;

“使用”和“向前声明”时,程序员的细微差别是什么? 编写文件时哪个更优选?

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

namespace mynamespace
{
    class myclass;
}

class A{
    mynamespace::myclass* ptr;

};

另外,正如jrok所指出的,您不能使用using将符号带到当前作用域之前,再进行符号的实际(向前)声明。

唯一using的作用是使当前范围内提供指定的符号。 它与前向声明无关。

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

namespace mynamespace {
    class myclass;
}

namespace this_header_namespace {
    using mynamespace::myclass;
}

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

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-声明引入该名称的缩写(即,您可以忽略名称空间限定)。

用名字和姓氏进行非正式类比:首先将介绍一个人,然后才以名字为基础。

原则上: 切勿将using-声明放在头文件内的全局范围内 这会将速记引入到包含该标题的每个翻译单元中,并且可能导致名称冲突。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM