Во всех наших курсах С++ все учителя всегда помещают using namespace std;
сразу после #include
в свои файлы .h
. Мне кажется, что это опасно с тех пор, включив этот заголовок в другую программу, я получу пространство имен, импортированное в мою программу, возможно, не осознавая, не намереваясь или не желая (включение заголовка может быть очень глубоко вложенным).
Итак, мой вопрос двойной: я прав, что using namespace
не должен использоваться в файлах заголовков и/или есть какой-то способ его отменить, например:
//header.h
using namespace std {
.
.
.
}
Еще один вопрос по тем же строкам: должен ли заголовочный файл #include
использовать все заголовки, соответствующие ему .cpp
, только те, которые необходимы для определений заголовков, и пусть .cpp
файл #include
или нет, и объявить все, что нужно, как extern
?
Обоснование вопроса такое же, как и выше: я не хочу сюрпризов при включении .h
файлов.
Кроме того, если я прав, это распространенная ошибка? Я имею в виду в реальном программировании и в "реальных" проектах.
Спасибо.