没有,因为未命名空间(这是他们居然叫)在C++标准定义是这样的:
7.3.1.1未命名空间[namespace.unnamed]
1.一种无名名称空间定义的行为就好像它是由
namespace unique { /* empty body */ }
using namespace unique;
namespace unique { namespace-body }
取代
其中翻译单元中唯一的所有匹配项被 替换为相同的标识符,并且此标识符与整个程序中的所有其他 标识符不同。因此,与你的类
它等同于:
namespace SomeUniqueNameGeneratedByTheCompiler {}
using namespace SomeUniqueNameGeneratedByTheCompiler;
namespace SomeUniqueNameGeneratedByTheCompiler
{
class AnonymousHelperClass
{
// . . .
};
}
所以AnonymousHelperClass
类的全资质::SomeUniqueNameGeneratedByTheCompiler::AnonymousHelperClass
,不::AnonymousHelperClass
。所以即使你这样做:
class AnonymousHelperClass; // Forward declaration
class C
{
// ...
private:
void Boing(AnonymousHelperClass &helper);
};
该前瞻性声明是指不同的AnonymousHelperClass
。您可以将前向声明置于SomeUniqueNameGeneratedByTheCompiler
命名空间中,但由于只有编译器知道此名称,因此无法完成。
如果你这样做了,编译器会选择一个不同的唯一名称。 – Daniel