Vincent Robert tiene razón en su comentario ¿Cómo se usan correctamente los espacios de nombres en C ++? .
Usando espacio de nombres
Los espacios de nombres se utilizan como mínimo para ayudar a evitar la colisión de nombres. En Java, esto se aplica a través del idioma "org.domain" (porque se supone que uno no usará nada más que su propio nombre de dominio).
En C ++, puede asignar un espacio de nombres a todo el código de su módulo. Por ejemplo, para un módulo MyModule.dll, puede asignar a su código el espacio de nombres MyModule. He visto en otra parte a alguien que usa MyCompany :: MyProject :: MyModule. Supongo que esto es excesivo, pero en general, me parece correcto.
Usar "usar"
El uso debe usarse con mucho cuidado porque importa efectivamente uno (o todos) los símbolos de un espacio de nombres a su espacio de nombres actual.
Es malo hacerlo en un archivo de encabezado porque su encabezado contaminará todas las fuentes incluidas (me recuerda a las macros ...), e incluso en un archivo de origen, mal estilo fuera del alcance de una función porque se importará a alcance global Los símbolos del espacio de nombres.
La forma más segura de usar "usar" es importar símbolos seleccionados:
void doSomething()
{
using std::string ; // string is now "imported", at least,
// until the end of the function
string a("Hello World!") ;
std::cout << a << std::endl ;
}
void doSomethingElse()
{
using namespace std ; // everything from std is now "imported", at least,
// until the end of the function
string a("Hello World!") ;
cout << a << endl ;
}
Verá mucho "usar el espacio de nombres estándar"; en tutoriales o códigos de ejemplo. La razón es reducir la cantidad de símbolos para facilitar la lectura, no porque sea una buena idea.
"utilizando el espacio de nombres estándar;" Scott Meyers lo desalienta (no recuerdo exactamente qué libro, pero puedo encontrarlo si es necesario).
Composición del espacio de nombres
Los espacios de nombres son más que paquetes. Otro ejemplo se puede encontrar en "El lenguaje de programación C ++" de Bjarne Stroustrup.
En la "Edición especial", en 8.2.8 Composición del espacio de nombres , describe cómo puede combinar dos espacios de nombres AAA y BBB en otro llamado CCC. Por lo tanto, CCC se convierte en un alias para AAA y BBB:
namespace AAA
{
void doSomething() ;
}
namespace BBB
{
void doSomethingElse() ;
}
namespace CCC
{
using namespace AAA ;
using namespace BBB ;
}
void doSomethingAgain()
{
CCC::doSomething() ;
CCC::doSomethingElse() ;
}
Incluso podría importar símbolos seleccionados de diferentes espacios de nombres, para construir su propia interfaz de espacio de nombres personalizada. Todavía tengo que encontrar un uso práctico de esto, pero en teoría, es genial.
std
espacio de nombres a los símbolos en lugar de usarlosusing
. Entonces siempre escribostd::cout
ostd::string
ahora porque así es como los llamo ahora. Nunca solo escribiríacout
.