[英]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.