【发布时间】:2011-07-27 02:38:23
【问题描述】:
考虑一下这段 C++ 代码:
namespace
{
void f()
{
}
class A
{
void f()
{
::f(); // VC++: error C2039: 'f' : is not a member of '`global namespace''
}
};
}
GCC 编译得很好。 Visual C++ 2008 编译失败,出现 C2039 错误。这两个编译器中的哪一个在这里是正确的?有什么方法可以正确引用 "global" f 吗?
编辑: Zack 建议尝试一下,它适用于两种编译器。我觉得有点奇怪。
namespace
{
void f()
{
}
class A
{
void f();
};
}
void A::f()
{
::f();
}
【问题讨论】:
-
不是我知道一个真正的答案,但也许这也很重要:使用不隐藏外部名称的函数名称? :)
-
我同意。这更像是一个理论问题。
-
当然,而且我认为这很有趣。 +1 发现这一点。
-
如果将
A::f的定义拉到class A之外会发生什么?如果你把它从匿名命名空间声明中拉出来怎么办? -
扎克,它有效。但我发现
::A::f可能存在问题,如果有的话。
标签: c++ visual-c++ gcc namespaces language-lawyer