"Usando el espacio de nombres" en los encabezados de c ++

En todos nuestros cursos de c ++, todos los profesores siempre ponenusing namespace std; justo después de la#includes en su.h archivos. Esto me parece peligroso desde entonces, al incluir ese encabezado en otro programa, obtendré el espacio de nombres importado en mi programa, tal vez sin darme cuenta, con intención o sin querer (la inclusión del encabezado puede estar muy anidada).

Así que mi pregunta es doble: ¿tengo razón queusing namespace no debe usarse en archivos de encabezado, y / o hay alguna forma de deshacerlo, algo como:

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

Una pregunta más en la misma línea: ¿debería un archivo de encabezado#include todos los encabezados que corresponde a.cpp necesita, solo aquellos que son necesarios para las definiciones de encabezado y permiten que.cpp archivo#include el resto, o ninguno y declara todo lo que necesita comoextern?
El razonamiento detrás de la pregunta es el mismo que el anterior: no quiero sorpresas cuando incluyo.h archivos.

Además, si tengo razón, ¿es un error común? Me refiero a la programación del mundo real y a los proyectos "reales" que existen.

Gracias

Respuestas a la pregunta(9)

Su respuesta a la pregunta