如何仅在这种情况下隐藏 `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。学会喜欢包含大量 :: 运算符的代码。