Operador de acceso a ámbito
|
Operador de acceso a ámbito. El operador :: de acceso a ámbito o resolución de ámbito actúa como puente o camino para acceder a objetos que momentáneamente están fuera de ámbito, permite referenciar (acceder) a un tipo, objeto, función o enumerador incluso si su identificador está oculto. Por ejemplo, anteponiéndolo a un identificador global, permite acceder al mismo incluso cuando es ocultado por una redeclaración homónima
Ejemplo
int x = 2; // Variable global
...
void main() {
int x = 3; // Variable local
std::cout << "X = " << x << std::endl; // L.5: x local
std::cout << "X = " << ::x << std::endl; // L.6: x global
}
En el ejemplo anterior, la variable local x oculta momentáneamente a la global del mismo nombre. Sin embargo, como puede verse en L.6, el operador :: antepuesto a la variable señala que no se trata de la versión local, sino la perteneciente al ámbito global. Al mismo tiempo, los especificadores std:: antepuestos a los objetos cout y endl especifican que tales objetos se encuentran en dicho espacio de nombres std, que pertenece a la Librería Estándar C++.
Sintaxis
Como se deduce del propio ejemplo, desde un punto de vista formal existen dos tipos de operador de acceso a ámbito: unario y binario, que adoptan respectivamente las siguientes sintaxis: :: <objeto> // Op. unario
<subespacio> :: <objeto> // Op. binario
En ambos casos, <objeto> es cualquier objeto, función o enumerador y se refiere a la versión del espacio global. Es el caso del término ::x en L.6 del ejemplo anterior. Cuando se utiliza como operador binario, <subespacio> es el nombre de un subespacio de nombres diferente del actual; el nombre de una clase; estructura o unión (recuerde que estas entidades constituyen un tipo especial de espacio de nombres). En estos casos el operador sirve para especificar objetos de espacios de nombres diferentes del actual. Ejemplo:
namespace ALPHA { ... long double LD; class C { public: int x; }; }
ALPHA::LD = 1.0; // Acceso a variable LD
Para acceder a un miembro de clase debe especificarse el nombre de la clase seguido del operador y del miembro. Por ejemplo:
ALPHA::C::x = 1 // Acceso a miembro de C en ALPHA
- Los identificadores precedidos por el operador de resolución de ámbito se denominan identificadores cualificados.
Véase también
- Ámbito (Programación)
- Operadores
- Operadores aritméticos
- Operadores lógicos
- Operadores de manejo de bits
- Operador condicional
- Operador coma
- Operadores relacionales
- Operadores de asignación
- Operadores de modelado de tipos
- Operadores añadidos a expresión
- Operadores de puntero
- Operador new
- Operador delete
- Operador sizeof
- Operador typeid
- Operador de preproceso