Я приведу еще несколько примеров в дополнение к остальным ответам.
Многие книги по программированию на C ++ часто раскрывают все пространство имен STD, добавляя следующую строку где-то в начале исходного файла:
using namespace std;
Раскрытие полного пространства имен на самом деле является плохой практикой в реальной жизни из-за различных конфликтов, которые могут возникнуть в какой-то момент, особенно когда код предоставляется многими разработчиками, работающими над одной и той же задачей.Такой стиль программирования также противоречит одному из основных правил объектно-ориентированного программирования - избегайте демонстрации большего, чем это необходимо, путем инкапсуляции ваших данных.Вот почему, например, классы имеют открытых и закрытых членов, получателей и установщиков и так далее.Пространства имен - это просто еще один способ группировки информации.Экспонирование всего пространства имен std противоречит этому правилу, особенно если вы хотите использовать, скажем, только std :: cout , std :: cin и станд :: епсИ .Вы можете легко применить , используя к определенным функциям, что позволяет вам более точно управлять и с большей вероятностью избежать конфликтов имен в нескольких пространствах имен, которые вы можете использовать в определенный момент:
using std::cout;
using std::cin;
using std::endl;
Это позволяет вам вызывать cout , cin и endl в вашем коде без префикса пространства имен.Если в какой-то момент возникает конфликт имен, гораздо, гораздо проще взглянуть на набор , используя директивы , вместо того, чтобы интересоваться, откуда во всем пространстве имен, которое вы выявили, возникает ошибка.
Люди также используют директиву using для одной функции / переменной, если существует цепочка пространств имен или имя пространства имен слишком длинное.Если у вас есть что-то вроде
namespace my_really_long_and_pointless_namespace_that_does_nothing_at_all {
void foo() { ... }
}
или
namespace1 {
namespace2 {
...
namepaceN {
void foo() { ... }
}
}
}
, то будет неприятно, когда вам придется писать все это каждый раз, когда вы хотите вызвать foo () метод.Написав
using my_really_long_and_pointless_namespace_that_does_nothing_at_all::foo;
и, соответственно,
using namespace1::namespace2:: ... ::namespaceN::foo;
, вы избавите свои пальцы от работы.