“Usando espaço para nome” nos cabeçalhos c ++

Em todos os nossos cursos de c ++, todos os professores sempre colocamusing namespace std; logo após o#includes em seus.h arquivos. Parece-me perigoso desde então, ao incluir esse cabeçalho em outro programa, o namespace será importado para o meu programa, talvez sem perceber, pretender ou querer (a inclusão do cabeçalho pode ser profundamente aninhada

Então minha pergunta é dupla: Estou certo queusing namespace não deve ser usado em arquivos de cabeçalho e / ou existe alguma maneira de desfazê-lo, algo como:

//header.h
using namespace std {
.
.
.
}

Mais uma pergunta na mesma linha: um arquivo de cabeçalho#include todos os cabeçalhos correspondentes.cpp precisa, apenas aqueles necessários para as definições de cabeçalho e permite que o.cpp Arquivo#include o resto ou nenhum e declare tudo o que precisa comoextern?
O raciocínio por trás da pergunta é o mesmo que acima: não quero surpresas ao incluir.h arquivos

Also, se eu estiver certo, isso é um erro comum? Quero dizer, na programação do mundo real e em projetos "reais" por a

Obrigado

questionAnswers(9)

yourAnswerToTheQuestion