¿El siguiente código es válido en C++?¿Es este código válido C++?
const int var = 10;
{
int var[var]; // why doesn't this give any error ?
}
Nota: El código se compila en mi compilador g ++.
¿El siguiente código es válido en C++?¿Es este código válido C++?
const int var = 10;
{
int var[var]; // why doesn't this give any error ?
}
Nota: El código se compila en mi compilador g ++.
Sí, el código es válido C++. No local var
es visible hasta el punto de declaración de var
local.
Por lo tanto, int var[var]
define una matriz local de 10 enteros.
¿Como está? No. ¿Si estuviera en el cuerpo de una función? Sí.
La primera línea declara una constante entera llamada var
con un valor de 10
.
Las llaves comienzan un nuevo bloque. Dentro de ese bloque, se declara una nueva variable, llamada var
, que es una matriz de int
con un tamaño igual al valor de la constante entera previamente declarada como var
(10
).
La clave es que var
se refiere a la primera variable hasta después de la segunda variable llamada var
está totalmente declarado. Entre el punto y coma que sigue a la segunda declaración y el corsé de cierre, var
se refiere a la segunda variable. (Si había un inicializador para la segunda variable, var
comenzaría a hacer referencia a la segunda variable inmediatamente antes de la inicialización.)
Lol - +1 para el bit "en el cuerpo de una función": P –
@Billy: Bueno, creo que es algo importante; si este código estuviera en el espacio de nombres o en el alcance de la clase, tendrías que hacer que el bloque sea un espacio de nombres o clase o función o algo ... –
@James McNellis: nombre escondido, o una de mis características más odiadas. Puede pasar horas intentando entender qué sucede ... –
Si el código es C válida ++ Es un concepto de ALCANCE: Nombres Ocultación
const int var = 10;
{
int var[var]; // why doesn't this give any error ?
}
Creo que este enlace borra la duda
en C++:
http://msdn.microsoft.com/en-US/library/9a9h7328%28v=VS.80%29.aspx
En C:
Si quieres profundo conocimiento sobre esto: Ir a este enlace, aquí la información que se trata de léxico frente ámbito dinámico
http://en.wikipedia.org/wiki/Scope_%28programming%29
pero en su código: "Alcance ::" de visibilidad de var. Aquí difiere como variable local y no local. llaves internas {x = 1; } variable local. donde como aquí {y = 1; {x = 1;}}, aquí es diferente.
enlaces útiles
http://msdn.microsoft.com/en-us/library/b7kfh662%28VS.80%29.aspx
http://www.awitness.org/delphi_pascal_tutorial/c++_delphi/c++_scope_variables.html
@BE: Creo que los primeros 3 enlaces que dio son claros.cerca de este ejemplo> El ramining no es necesario –
¿Por qué sería * * No será válida? –