沒有,因爲未命名空間(這是他們居然叫)在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