Единственная причина, по которой я могу придумать, состоит в том, что в C ++ вы, вероятно, будете ссылаться на имя базового класса в списке инициализатора конструктора, например так:
namespace Two {
/*...*/
class B : public One::A {
public:
B():A()
{
/*...*/
}
};
}
Конечно, цель в том, чтобыотличается от того, что в вашем примере, потому что вы фактически объявляете локальную переменную внутри конструктора, тогда как в моем примере A()
относится к объекту типа A
, который неявно присутствует в определении class B
из-за наследования.
Однако ситуация с моим примером более вероятна, поэтому я думаю, они подумали, что давайте не будем требовать явного указания пространства имен в этом случае.Как следствие, любая ссылка на A
без пространства имен интерпретируется как ссылка на базовый класс, а не на любой другой класс с именем A
, даже если он находится в том же пространстве имен, что и объявление B
.