C++: пространства имен — как правильно использовать в заголовочных и исходных файлах?

Рассмотрим пару двух исходных файлов: файл объявления интерфейса (*.hили *. hpp) и файл его реализации ( *.cpp).

Пусть файл *.hвыглядит следующим образом:

namespace MyNamespace {
  class MyClass {
  public:
    int foo();
  };
}

Я видел две разные практики использования пространств имен в исходных файлах:

*.cpp, демонстрирующий практику №1:

#include "MyClass.h"
using namespace MyNamespace;

int MyClass::foo() { ... }

*.cpp, показывающий практику №2:

#include "MyClass.h"
namespace MyNamespace {

  int MyClass::foo() { ... }

}

Мой вопрос:Есть ли разница между этими двумя практиками и считается ли одна лучше другой?

75
задан Mogsdad 17 August 2015 в 17:27
поделиться