2011-10-03 23 views

risposta

5

L'ambito è la regione in cui la variabile è accessibile.
La durata è l'intervallo di tempo durante il quale un oggetto rimane valido.

Un semplice esempio:

#include <iostream.h> 

void doSomething() 
{ 
    x = 5; //Error! Not Accessible 
} 

int main() 
{ 

     int x = 4; 
     std::cout<< x << endl; 
     { 
      int x = 2; 
      cout << x << endl; 
     } 
     doSomething(); 
     std::cout<< x << endl; 
     return 0; 
} 
Quanto sopra

dà l'output:

Nel programma precedente,
durata variabile x = 4 è t in tutto il resto, cioè: rimane vivo durante l'esecuzione del main, inoltre è accessibile all'interno del main, che è il suo scopo. Si noti che non è accessibile nella funzione perché è oltre l'ambito della variabile x.

mentre l'ambito e la durata della variabile x = 2 si trova all'interno delle parentesi graffe di supporto {} all'interno del main.

+0

"rimane valido" significa "in uso"? In che modo fa la differenza con l'ambito della variabile? –

+0

@ R.MartinhoFernandes: beh, non è corretto parlare della durata di una variabile, dal momento che una variabile è un oggetto. come ricordo lo standard definisce una variabile come oggetto con nome. tuttavia, probabilmente non ho senso ora, e probabilmente è a causa di una revisione della cronologia SO che rimuove il contesto originale della tua osservazione? –

+1

Seguito del commento di Alf: una variabile è un'associazione di un simbolo (nome) e un oggetto. La vita riguarda l'oggetto (e solo l'oggetto); scope riguarda il simbolo (e solo il simbolo). –

20

"Scope" di una variabile è un'area del codice sorgente, in cui è possibile fare riferimento a tale variabile.

"Durata" indica la durata dell'esecuzione del programma.

per default la durata di una variabile locale è lo stesso come il suo campo di applicazione:

void foo() 
{ 
    int x = 123; 
    cout << x << endl; 
    x += 1; 
} 

int main(){ foo(); foo(); foo(); } 

Qui, ogni volta foo viene chiamato un nuovo x viene creato (lo spazio è riservato in pila), e quando l'esecuzione lascia il blocco in cui è stato dichiarato x, viene eliminato x (che per int significa solo che lo spazio che era riservato, ora è liberato per il riutilizzo).

Al contrario:

void foo() 
{ 
    static int x = 123; 
    cout << x << endl; 
    x += 1; 
} 

int main(){ foo(); foo(); foo(); } 

Qui, dal momento che x è dichiarato static, lo spazio è riservato per x prima dell'esecuzione programma inizia ancora. x ha una posizione fissa in memoria, è una variabile statica . E C++ ha regole speciali sull'inizializzazione di tale variabile: accade la prima volta che l'esecuzione passa attraverso la dichiarazione.

Pertanto, nella prima chiamata di foo questo x è inizializzato, l'istruzione output visualizza 123, e l'incremento aumenta il valore di 1 unità chiamata successiva l'inizializzazione viene saltata (che è già stata eseguita), il valore 124 viene emesso e il valore viene nuovamente incrementato. Presto.

La durata di questo x è dall'inizio dell'esecuzione alla fine dell'esecuzione.

0

L'ambito di una variabile viene determinato al momento della compilazione. È la regione nel programma in cui lo stesso oggetto definito tramite la definizione è accessibile tramite tale identificativo.

La durata di un oggetto è una funzionalità definita in fase di esecuzione, attraverso il flusso di esecuzione. È possibile accedere a un oggetto tramite un puntatore anche se la variabile attraverso la quale è stata definita non è nell'ambito.

void f(char *a) { 
    *a = 'f'; 
} 

void g(void) { 
    char aChar = ' '; 
    f(&aChar); 
} 

Ecco l'ambito di variabili aChar (l'identificatore) è l'organo di g. Durante l'esecuzione di g la durata dell'oggetto si espande fino all'esecuzione di f. L'utilizzo dell'identificatore aChar all'interno di f sarebbe illegale, il compilatore potrebbe dirti qualcosa come "l'indetificatore sconosciuto aChar nella funzione f". L'uso di un puntatore su quell'oggetto come sopra è completamente legale.

0

L'ambito di una variabile si riferisce alla misura in cui diverse parti di un programma hanno accesso alla variabile. Le variabili possono essere dichiarate come:

  • all'interno di una funzione che si chiama variabili locali o variabili interne.

  • Al di fuori di tutte le funzioni chiamate variabili globali o variabili esterne e durata o "estensione" si estende per l'intera esecuzione del programma.

Ecco tutorial dettagliato sulle variabili con gli esempi: What is variable in C

+0

E per quanto riguarda scope vs. vita per la domanda? Ambito – J0e3gan

+0

- definizione delle parti di un programma che possono accedere a una variabile a vita - definizione quando una variabile viene creata e distrutta –