using
и using namespace
очень и очень полезны, чтобы сделать код более читабельным - удалите помехи.
Но в любом случае, когда затрудняется выяснить, откуда появляется символ, я отказываюсь импортировать все его пространство имен.
Я пытаюсь ограничить область импортируемых пространств имен:
void bar() {
// do stuff without vector
{ using std::vector;
// do stuff with vector
}
// do stuff without vector
}
Для "общеизвестных" библиотек, таких как std
, я бы осмелился использовать using namespace std
. Есть основания полагать, что каждый, кто читает этот код, знает эти символы.
В качестве идентификатора ключевое слово using
также используется для указания того, что производный класс также экспортирует перегруженные члены своего суперкласса.
class A {
void f( A );
void f( bool );
};
class B : public A {
using A::f; // without this, we get a compilation error in foo()
void f(bool);
};
void foo() {
B b;
b.f( A() ); // here's a compilation error when no `using` is used in B
}