¿Se pueden anidar los espacios de nombres en C++?

En C++, los espacios de nombres se pueden anidar y la resolución de las variables del espacio de nombres es jerárquica. Por ejemplo, en el código siguiente, el espacio de nombres interior se crea dentro del espacio de nombres exterior , que está dentro del espacio de nombres global. En la línea “int z = x” , x se refiere a outside::x . Si x no hubiera estado en el exterior , entonces esta x se habría referido a x en el espacio de nombres global. 

Los espacios de nombres se pueden anidar donde puede definir un espacio de nombres dentro de 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 mediante operadores de resultado de la siguiente manera:

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

En las declaraciones anteriores, si está utilizando namespace_name1, hará que los elementos de namespace_name2 estén disponibles en el alcance de la siguiente manera:

C++

#include <iostream>
using namespace std;
 
// first name space
namespace first_space{
   void func(){
      cout << "Inside first_space" << endl;
   }
   // second name space
   namespace second_space{
      void func(){
         cout << "Inside second_space" << endl;
      }
   }
}
using namespace first_space::second_space;
int main ()
{
  
   // This calls function from second name space.
   func();
    
   return 0;
}
 
// If we compile and run above code, this would produce the following result:
// Inside second_space
Producción

Inside second_space

CPP

#include<iostream>
 
int x = 20;
namespace outer
{
  int x = 10;        
  namespace inner
  {
    int z = x; // this x refers to outer::x
  }
}
 
int main()
{
  std::cout<<outer::inner::z; //prints 10
  getchar();
  return 0;
}
Producción

10

La salida del programa anterior es 10. En un Node lateral, a diferencia de los espacios de nombres de C++, los paquetes de Java no son jerárquicos. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *