Espacios de nombres en C ++

 1. ¿Por qué usar espacios de nombres?

Considere una situación en la que tenemos dos personas con el mismo nombre, Zara, en la misma clase. Cuando necesitamos distinguirlos, debemos usar información adicional y sus nombres, como esta área, si viven en diferentes áreas o el nombre de su madre o padre, etc.

  Lo mismo sucederá en su aplicación C ++. Por ejemplo, podría estar escribiendo algún código con una función llamada xyz (), y hay otra biblioteca disponible que también tiene la misma función xyz (). Ahora el compilador no puede saber a qué versión de la función xyz () se refiere en el código.

  El espacio de nombres está diseñado para superar esta dificultad y se utiliza como información adicional para distinguir funciones, clases, variables, etc. similares, que tienen el mismo nombre en diferentes bibliotecas. Usando el espacio de nombres, puede definir el contexto en el que se define el nombre. Esencialmente, el espacio de nombres define un alcance.

Segundo, la definición del espacio de nombres

Solo hay un alcance global en lenguaje C:

1. Todos los identificadores globales en el lenguaje C comparten un alcance
2. Posibles conflictos entre los identificadores
C ++ propuso el concepto de espacios de nombres:

1. El espacio de nombres divide el alcance global en diferentes partes,
2. Los identificadores en diferentes espacios de nombres pueden tener el mismo nombre sin conflicto
3. Los espacios de nombres pueden anidarse
4. El alcance global también se denomina espacio de nombres predeterminado

Definiendo un espacio de nombres

Una definición de espacio de nombres comienza con el espacio de nombres de palabras clave seguido del nombre del espacio de nombres de la siguiente manera:

namespace namespace_name {
    // declaraciones de código 
}

Para llamar a la versión habilitada para el espacio de nombres, ya sea de función o variable, anteponga (: :) el nombre del espacio de nombres de la siguiente manera:

Para llamar a la versión habilitada para el espacio de nombres de una función o variable, agregue (: :) antes del nombre del espacio de nombres, de la siguiente manera:

nombre :: código;  // el código puede ser variable o funcional.

Veamos cómo el espacio de nombres abarca las entidades, incluidas las variables y las funciones:

Veamos cómo el espacio de nombres restringe entidades que incluyen variables y funciones:

#include <iostream>
 usando el  espacio de nombres estándar; 

// nombre espacio de 
nombres espacio de nombres first_space {
    void func () { 
      cout << " Inside first_space " << endl; 
   } 
} 

// segundo nombre espacio 
namespace second_space {
    void func () { 
      cout << " Inside second_space " << endl; 
   } 
} 

int main () {
    // Llama a la función desde el espacio de nombre.
   first_space :: func (); 
   
   // Las llamadas funcionan desde el espacio del segundo nombre. 
   second_space :: func (); 

   devuelve  0 ; 
}

Si compilamos y ejecutamos el código anterior, esto produciría el siguiente resultado:

Inside first_space 
Inside second_space

También puede evitar usar la directiva de espacio de nombres. Agregue un prefijo antes del espacio de nombres. Esta directiva le dice al compilador que el código posterior está usando el nombre en el espacio de nombres especificado. Por lo tanto, el siguiente código implica el espacio de nombres

#include <iostream>
 usando el  espacio de nombres estándar; 

// nombre espacio de 
nombres espacio de nombres first_space {
    void func () { 
      cout << " Inside first_space " << endl; 
   } 
} 

// segundo nombre espacio 
namespace second_space {
    void func () { 
      cout << " Inside second_space " << endl; 
   } 
} 

usando el  espacio de nombres first_space;
int main () {
    //Esto llama a la función desde el espacio de nombre. 
   func (); 
   
   devuelve  0 ; 
}

Si compilamos y ejecutamos el código anterior, esto produciría el siguiente resultado:

Inside first_space

La directiva 'using' también se puede usar para referirse a un elemento en particular dentro de un espacio de nombres. Por ejemplo, si la única parte del espacio de nombres estándar que tiene la intención de usar es cout, puede consultarlo de la siguiente manera:

El código posterior puede referirse a cout sin anteponer el espacio de nombres, pero otros elementos en el espacio de nombres estándar aún deberán ser explícitos de la siguiente manera:

#include <iostream>
 usando std :: cout; 

int main () { 
   cout << " std :: endl se usa con std! " << std :: endl; 
   
   devuelve  0 ; 
}

Si compilamos y ejecutamos el código anterior, esto produciría el siguiente resultado:

std :: endl se usa con std!

Los nombres introducidos en la directiva using siguen las reglas de alcance normal. El nombre es visible desde el punto de uso de la directiva hasta el final del ámbito donde se encuentra la directiva. Las entidades con el mismo nombre en el ámbito externo están ocultas.

Resumen

Uso del espacio de nombres C ++:

Use todo el espacio de nombres: usando el nombre del espacio de nombres;
Use variables en el espacio de nombres: usando name :: variable
Utilice variables del espacio de nombres predeterminado: :: variable

Espacio de nombres discontinuo

El espacio de nombres se puede dividir en varias partes para definir, por lo que el espacio de nombres consiste en la suma de sus partes definidas por separado. Las diversas partes del espacio de nombres se pueden distribuir en múltiples archivos. Por lo tanto, si una parte del espacio de nombres requiere un nombre definido en otro archivo, el nombre aún debe declararse. Escriba la siguiente definición de espacio de nombres, o defina un nuevo espacio de nombres, o agregue nuevos elementos a un espacio de nombres existente.

namespace namespace_name {
    // declaraciones de código 
}

El espacio de nombres anidado puede anidar el espacio de nombres

Puede definir un espacio de nombres en otro espacio de nombres de la siguiente manera:

namespace namespace_name1 {
    // declaraciones de código 
   namespace namespace_name2 {
       // declaraciones de código 
   } 
}

Puede acceder a los miembros del espacio de nombres anidado utilizando el operador de resolución, de la siguiente manera:

// para acceder a los miembros de namespace_name2 
usando  namespace namespace_name1 :: namespace_name2; 

// para acceder a los miembros del espacio de nombres: nombre1 
usando el  espacio de nombres namespace_name1;

En la declaración anterior, si se utiliza namespace_name1, hará que los elementos de scope_name2 estén disponibles en el ámbito, como se muestra a continuación:

#include <iostream>
 usando el  espacio de nombres estándar; 

// nombre espacio de 
nombres espacio de nombres first_space {
    void func () { 
      cout << " Inside first_space " << endl; 
   } 
   
   // segundo espacio de 
   nombres espacio de nombres second_space {
       void func () { 
         cout << " Inside second_space " << endl; 
      } 
   } 
} 

usando el  espacio de nombres first_space :: second_space;
int main () {
    //Esto llama a la función del espacio del segundo nombre. 
   func (); 
   
   devuelve  0 ; 
}

Si compilamos y ejecutamos el código anterior, esto produciría el siguiente resultado:

Inside second_space

Referencia de https://www.tutorialspoint.com/cplusplus/cpp_namespaces.htm

Supongo que te gusta

Origin www.cnblogs.com/xxxsans/p/12717021.html
Recomendado
Clasificación