He leído que el uso de directivas no se fomenta en C++ diciendo que nunca pongas el uso de directivas en los archivos de encabezado. ¿Por qué es así? ¿Alguna pista para mí?¿por qué no se recomienda utilizar directivas en C++?
Gracias!
He leído que el uso de directivas no se fomenta en C++ diciendo que nunca pongas el uso de directivas en los archivos de encabezado. ¿Por qué es así? ¿Alguna pista para mí?¿por qué no se recomienda utilizar directivas en C++?
Gracias!
using namespace x;
es una muy mala idea, ya que tiene ni idea qué nombres está importando, incluso con la biblioteca estándar.
Sin embargo: using std::cout;
y declaraciones similares son muy buena idea, ya que importan símbolos de forma explícita, y hacer más legible el código (aunque todavía podría no ser una buena idea para ponerlos en el ámbito mundial en los archivos de cabecera) .
Porque puede romper el código de trabajo, cuando intenta agregar su encabezado, si su espacio de nombres de encabezado pisotea otro espacio de nombres definido en el código de trabajo anterior.
Si usted está hablando de la directiva 'usando', la razón para no usarlo es porque si usted dice
using namespace std;
en un fichero de cabecera, todos los archivos que #Include esa cabecera se verán obligados usar ese espacio de nombres, y eso podría causar problemas.
No, no se verán obligados a usar ese espacio de nombres. –
"¡Esto no es un argumento, es solo una contradicción!" – struppi
@struppi mynamespace :: foo = 1 –
Es similar a no declarar variables estáticas en archivos de encabezado. Agregar la instrucción using en los archivos de encabezado llevará el espacio de nombres a los archivos .cpp que incluyen el archivo de encabezado. No es necesario. En el peor de los casos, es posible que tenga que cambiar algunos nombres de variables o funciones en .cpp para evitar conflictos de nombres.
a quién le importan los nombres que importa, los errores del compilador si hay ambigüedad ... – Inverse
@Inverso, no solo hace que los nombres sean visibles, sino que los nombres son visibles como parte de un alcance mucho más amplio que incluye la directiva using pero también el espacio de nombres que especifica Los nombres no se importan explícitamente en el ámbito donde aparece la directiva. Entonces, son posibles ambigüedades con muchos más nombres. –