¿Por qué se usa "using namespace std;" considerado una mala práctica?

Otros me han dicho que escribir using namespace std; en el código es incorrecto, y que debería usar std::cout y std::cin directamente en su lugar.

¿Por qué es using namespace std; considerado una mala práctica? ¿Es ineficiente o corre el riesgo de declarar variables ambiguas (variables que comparten el mismo nombre que una función en std espacio de nombres)? ¿Afecta al rendimiento?

preguntado el 21 de septiembre de 09 a las 00:09

No olvide que puede hacer: "using std :: cout;" lo que significa que no tiene que escribir std :: cout, pero no traiga todo el espacio de nombres std al mismo tiempo. -

Es particularmente malo usar 'using namespace std' en el alcance del archivo en los archivos de encabezado. Usarlo en archivos de origen (* .cpp) en el alcance del archivo después de todas las inclusiones no es tan malo, ya que su efecto se limita a una sola unidad de traducción. Incluso menos problemático es usarlo dentro de funciones o clases, porque su efecto se limita al alcance de la función o clase. -

Me desaconsejaría usar la directiva using pero para espacios de nombres específicos como std::literals::chrono_literals, Poco::Data:Keywords,Poco::Units y cosas que se ocupan de literales o trucos de legibilidad. Siempre que esté en archivos de implementación o de encabezado. Podría estar bien en un ámbito de función, supongo, pero aparte de los literales y demás, no es útil. -

@Jon: No tiene nada que ver con el espacio de nombres std en particular. Mi énfasis estaba destinado a estar en "el alcance del archivo en los archivos de encabezado". Para ponerlo como un consejo: No use "using namespace" (std u otro) en el alcance del archivo en los archivos de encabezado. Está bien usarlo en archivos de implementación. Perdón por la ambigüedad. -

Solo se considera una mala práctica en los encabezados. Está bien en archivos de origen que no se incluyen en otro lugar (es decir, archivos cpp). Vea la respuesta de @mattnewport a continuación. stackoverflow.com/a/26722134/125997 -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.