c++ - microsoft - visual studio installer
Usar una variable con el mismo nombre en diferentes espacios (4)
Cuando declaras una nueva variable, su nombre se vuelve visible aquí
int x =
// ^- there
porque es en ese punto que la variable está declarada completamente, y como tal; su nombre significa algo. En este momento, se ocultará cualquier otra (variable declarada previamente) en un ámbito circundante.
Este código se compila, pero tengo un error de tiempo de ejecución en Visual Studio :
Fallo de verificación en tiempo de ejecución # 3 - la variable ''x'' se está utilizando sin inicializar ...
int x = 15;
int main()
{
int x = x;
return 0;
}
No entiendo ese comportamiento ... en el cuadro de error cuando hago clic en continuar, el programa se reanuda y x tiene un contenido corrupto (como -8556328
lugar de 15
).
¿Por qué este código funciona sin problemas y la matriz int está bien declarada?
const int x = 5;
int main()
{
int x[x] = {1,2,3,4};
return 0;
}
No hay operador de resolución de alcance en C, por lo que es posible que no pueda usar
int x = x;
en tu programa.
por favor use SRO (operador de resolución de alcance: :) para decirle al compilador qué x es real x en su mente. A medida que los nombres definidos por el usuario son destrozados (los nombres están decorados) algo así para evitar ambigüedades en su nivel, estos son solo nombres utilizados por el compilador que mejor se adapta a ellos
int x = 15;// Real name = gui_x
int main()
{
int x = x;// lui_x
return 0;
}
De esta forma, el tiempo de ejecución sabrá qué versión está utilizando, pero para evitar ambigüedades espera que use nombres específicos. Algunas veces, el problema anterior surge cuando no sabes que estás usando nombres ya usados. Para esto C ++ ha creado SRO.
Ahora, en el caso de que el array x sea la dirección & no el entero que almacena algo, es por eso que el compilador no se confundió. Necesitas escribir
namespace abc //now all global variables are belongs to this ns abc
int x = 15;// Real name = gui_x
int main()
{
int x = abc::x;// lui_x
return 0;
}
x
se define a la izquierda de =
.
entonces en x[x]
, [x]
refieren a la global,
mientras que en x = x;
, x
oculta la x
global y se inicializa desde sí mismo -> UB.