如何仅在这种情况下隐藏 `A::x` 并公开 `B::x`?
How to hide `A::x` and expose `B::x` only in such a case?
namespace A
{
int a = 1;
int x = 2;
}
namespace B
{
int b = 3;
int x = 4;
}
using namespace A;
using namespace B;
using B::x;
int main()
{
return x; // error : reference to 'x' is ambiguous
}
如何在这种情况下隐藏A::x
并暴露B::x
?
你不能。
您将两个名称都纳入了范围,仅此而已。
要解决这个问题,请不要那样做;避免 using namespace
.
using namespace
将该命名空间带入当前命名空间。
完成后,您需要自己处理任何歧义。通常您为此使用范围解析运算符。
C++ 不提供取消引入命名空间的能力。
最好的办法是首先避开 using namespace
。学会喜欢包含大量 ::
运算符的代码。
namespace A
{
int a = 1;
int x = 2;
}
namespace B
{
int b = 3;
int x = 4;
}
using namespace A;
using namespace B;
using B::x;
int main()
{
return x; // error : reference to 'x' is ambiguous
}
如何在这种情况下隐藏A::x
并暴露B::x
?
你不能。
您将两个名称都纳入了范围,仅此而已。
要解决这个问题,请不要那样做;避免 using namespace
.
using namespace
将该命名空间带入当前命名空间。
完成后,您需要自己处理任何歧义。通常您为此使用范围解析运算符。
C++ 不提供取消引入命名空间的能力。
最好的办法是首先避开 using namespace
。学会喜欢包含大量 ::
运算符的代码。