 |
Когда получаешь, больше чем хотел, ты не всегда рад |
Если использовать в файле директиву
using для упрощённого обращения к членам какого-нибудь пространства имён, мы получаем до конца этого файла (и всех файлов, которые его вздумают включить) возможность обращаться ко
всем идентификаторам этого пространства имён прямо по конечному имени (имеется в виду неквалифицированный поиск имени, который для функций, ещё и влияет на Argument-dependent lookup), больше шансов встретить коллизию имён, косые взгляды коллег по цеху. Особенность такого объявления -- все члены этого пространства имён представляются так, будто они были объявлены в глобальной области видимости, а не в той, в которой находится директива
using. А это означает, что любые локальные идентификаторы, перекрывают идентификаторы из пространства имён.
Using-объявления -- выход из ситуации. Они позволяют точечно объявить в текущей области видимости имя конкретного идентификатора из пространства имён, не засоряя именами текущую область, а так же запрещает повторно использовать идентификаторы, к которым теперь можно обращаться без квалификации доступа:
double func(const double v) {
using std::list;
double list = 0.;
}