C/Visual C - El símbolo ::

 
Vista:

El símbolo ::

Publicado por Pun (3 intervenciones) el 19/08/2005 06:28:18
Hola

Tengo un código fuente (C/ C++) que en una parte tiene esto:

if (::sound_on) {...
...
... }
if (sound_on) {
...
...
... }

¿De qué manera afecta que "sound_on" tenga ese doble signo "dos puntos" delante?
¿Acaso será una equivocación de tecleado?

Noten que "sound_on" es una variable del tipo BOOL y no está en una clase ni nada parecido,
y que eso que les escribí aparecen en ese oirden. Además noten que yo no conozco mucho este lenguaje.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:El símbolo ::

Publicado por El Mogur (202 intervenciones) el 19/08/2005 16:49:59
En C++ existen lo que se llaman espacios de nombres (namespaces), que son algo "parecido" a los paquetes de Java.

Pues bien, tú puedes estar en un código dentro de ese namespace:

namespace Mio {

int variable;

}

Esa variable, desde código dentro del namesspace se referencia con "variable", y fuera de él se llama "Mio::variable".

Ahora, imagina que tenemos otra variable fuera del namespace, que se llama igual. Desde fuera, se distinguen con "variable" y "Mio::variable", pero... ¿desde dentro? En el código dentro del namespace el nombre "variable" hace referencia a la interna, a la del namespace. ¿Cómo se llama la otra, la de fuera? Pues, y ahí va la respueta a tu pregunta, con "::variable", es decir, los "::" indican el "namespace global", es decir, sirve para poder acceder a variables del namespace global cuyo nombre colisiona con identificadores del namespace actual.

Cuando no existe esa colisión, los "::" no son necesarios. Es decir, si en el namespace actual, imaginemos, no hay ninguna variable, función... vamos identificador en general, que se llame "sound_on", y sí lo hay en el namespace global, los identificadores "sound_on" y "::sound_on" hacen referencia a lo mismo.

Saludos.


Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Entonces es así

Publicado por Pun (1 intervención) el 19/08/2005 23:35:08
Creo que me quedó claro. Es de esta forma:

int Numero;

void Funcion;
{
int Numero;

Numero = 1; // asigna a la variable local de Funcion

::Numero = 2; //asigna a la variable global
}

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar