Il seguente codice è valido in C++?Questo codice è valido in C++?
const int var = 10;
{
int var[var]; // why doesn't this give any error ?
}
Nota: il codice viene compilato sul mio compilatore g ++.
Il seguente codice è valido in C++?Questo codice è valido in C++?
const int var = 10;
{
int var[var]; // why doesn't this give any error ?
}
Nota: il codice viene compilato sul mio compilatore g ++.
Sì, il codice è valido C++. var
non locale è visibile fino al punto di dichiarazione di var
locale.
Quindi, int var[var]
definisce un array locale di 10 numeri interi.
As-is? No. Se fosse nel corpo di una funzione? Sì.
La prima riga dichiara una costante intera denominata var
con un valore di 10
.
Le parentesi inizia un nuovo blocco. All'interno di quel blocco, viene dichiarata una nuova variabile, denominata var
, che è una matrice di int
con una dimensione uguale al valore della costante intera dichiarata in precedenza come var
(10
).
La chiave è che var
riferisce alla prima variabile fino dopo la seconda variabile denominata var
è completamente dichiarato. Tra il punto e virgola che segue la seconda dichiarazione e la parentesi di chiusura, var
fa riferimento alla seconda variabile. (Se ci fosse un inizializzatore per la seconda variabile, var
avrebbe cominciato a fare riferimento alla seconda variabile immediatamente prima della inizializzazione.)
Lol - +1 per il bit "nel corpo di una funzione": P –
@Billy: Beh, penso che sia un po 'importante; se questo codice fosse nello spazio dei nomi o nell'ambito della classe, dovresti rendere il blocco uno spazio dei nomi o una classe o una funzione o qualcosa ... –
@James McNellis: nascondere il nome, o una delle mie funzioni più odiate. Puoi passare ore a cercare di capire cosa c'è che non va ... –
Sì, il codice è valido C++ Si tratta di un concetto di scopo: nascondere i nomi
const int var = 10;
{
int var[var]; // why doesn't this give any error ?
}
Penso che questo link cancella il tuo dubbio
in C++:
http://msdn.microsoft.com/en-US/library/9a9h7328%28v=VS.80%29.aspx
In C:
Se u vuole profonda conoscenza su questo: Andare per questo link, ecco le informazioni è di circa lessicale rispetto scoping dinamico
http://en.wikipedia.org/wiki/Scope_%28programming%29
ma nel codice: "Scope ::" di visibilità di var .Qui differisce da variabile locale e non locale. Controventi interni {x = 1; } Variabile locale. dove come qui {y = 1; {x = 1;}}, qui è diverso.
link utili
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: Penso che i primi 3 link che hanno dato siano chiari. A proposito di questo esempio> La ramining non è necessaria –
Perché dovrebbe * non * è valida? –