【发布时间】:2014-06-20 03:46:56
【问题描述】:
下面的代码被VC++和clang拒绝了。
为什么using A::f 没有按预期工作?
有没有办法在给定的命名空间中隐藏一些名字?
namespace A
{
int f()
{
return 1;
}
};
namespace B
{
int f()
{
return 2;
}
};
using namespace A;
using namespace B;
using A::f; // I want to hide B::f and only use A::f, how to do?
int main()
{
auto n = f(); // error : call to 'f' is ambiguous
}
【问题讨论】:
-
你能想出一个标题,它不会要求未来的访问者按照你找到它的方式来命名他们的命名空间和变量吗?
-
您为什么希望它起作用?
f()s 都是可见的。此外,命名空间的右大括号后不需要分号。 -
这里的 using 声明完全是多余的。
-
C++
using不是 Javaimport。在 Java 中,您可以执行类似import java.util.*; import java.sql.*; import java.sql.Date;的操作并消除歧义。在 C++ 中你不能。
标签: c++ namespaces using