Ambito
I nomi in C++ possono essere utilizzati solo in alcune aree del programma. Quest'area viene denominata "l'ambito" del nome. L'ambito determina la "durata" di un nome che non indica un oggetto con estensione statica. L'ambito determina inoltre la visibilità di un nome quando vengono chiamati i costruttori e i distruttori di classe e quando vengono inizializzate le variabili locali per l'ambito. Per ulteriori informazioni, vedere Costruttori e Distruttori. Esistono cinque tipi di ambito:
**Ambito locale **Un nome dichiarato in un blocco è accessibile solo all'interno di tale blocco e dei blocchi da esso racchiusi e solo dopo la dichiarazione. I nomi degli argomenti formali di una funzione nell'ambito del relativo blocco più esterno hanno ambito locale, come se fossero stati dichiarati all'interno del blocco che racchiude il corpo della funzione. Si consideri il frammento di codice riportato di seguito.
{ int i; }
Poiché la dichiarazione di i si trova in un blocco racchiuso tra parentesi graffe, i ha ambito locale e non è mai accessibile perché nessun codice vi accede prima della parentesi graffa chiusa.
**Ambito funzione **Le etichette sono gli unici nomi che dispongono dell'ambito funzione. Possono essere utilizzate in qualsiasi punto di una funzione, ma non sono accessibili all'esterno della stessa funzione.
**Ambito file **Qualsiasi nome dichiarato all'esterno di tutti i blocchi o di tutte le classi dispone di un ambito file. È accessibile da qualsiasi punto dell'unità di conversione dopo la relativa dichiarazione. I nomi con ambito file che non dichiarano oggetti statici vengono spesso denominati nomi globali.
In C++, l'ambito file è anche noto come ambito dello spazio dei nomi.
Ambito di classe I nomi dei membri di classe dispongono dell'ambito di classe. Le funzioni membro delle classi sono accessibili solo tramite gli operatori di selezione dei membri (. o –>) oppure gli operatori puntatore a membro (.* o –>*) in un oggetto o in un puntatore a un oggetto di tale classe; i dati dei membri di classe non statici vengono considerati locali rispetto all'oggetto di tale classe. Si consideri la seguente dichiarazione di classe:
class Point { int x; int y; };
I membri della classe x e y vengono considerati nell'ambito della classe Point.
**Ambito prototipo **I nomi dichiarati in un prototipo di funzione sono visibili solo fino alla fine di tale prototipo. Il prototipo riportato di seguito dichiara tre nomi (strDestination, numberOfElements e strSource); questi nomi escono dall'ambito alla fine del prototipo:
errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );