Порядок поиска пространства имен

, у меня есть два пространства имен, каждое из которых имеет функцию с тем же именем. Если из одного из пространств имен я хочу вызвать функцию, которая лучше всего подходит. функция в NamespaceA, если я вызываю MyFunction (...), конечно, она использует функцию в NamespaceA. Однако, если я добавлю 'using NamespaceB :: MyFunction', я бы ожидал описанного мной поведения. на самом деле вижу, что он ВСЕГДА находит функцию NamespaceB, даже если я нахожусь в пространстве имен A. ОДНАКО, если я ТАКЖЕ добавляю using :: NamespaceA (даже если я уже нахожусь в пространстве имен A), он работает так, как я ожидал. ниже. Кто-нибудь может объяснить, как это работает?

#include <iostream>

namespace NamespaceA
{
  void DoSomething();
  void MyFunction(int object);
}

namespace NamespaceB
{
  void MyFunction(float object);
}

namespace NamespaceA
{
  void DoSomething()
  {
    using NamespaceA::MyFunction; // Note that without this line the lookup always fins the NamespaceB::MyFunction!
    using NamespaceB::MyFunction;

    MyFunction(1);
    MyFunction(2.0f);
  }

  void MyFunction(int object)
  {
    std::cout << "int: " << object << std::endl;
  }
}

namespace NamespaceB
{
  void MyFunction(float object)
  {
    std::cout << "float: " << object << std::endl;
  }
}

int main(int argc, char *argv[])
{
  NamespaceA::DoSomething();

  return 0;
}
7
задан David Doria 21 February 2012 в 16:19
поделиться