Nomi e nomi completi
Nomi utilizzati con l'operatore binario di risoluzione dell'ambito (::) sono denominati “nomi completi.„ Il nome specificato dopo l'operatore binario di risoluzione dell'ambito necessario essere un membro della classe specificata a sinistra dell'operatore o un membro della classe base.
Nomi specificati dopo l'operatore di selezione dei membri (. o - >) devono essere membri del tipo della classe dell'oggetto specificato a sinistra dell'operatore o i membri della classe base.Nomi specificati a destra dell'operatore di selezione dei membri (- >) possono essere anche gli oggetti di un altro tipo di classe, a condizione che la sinistra di - > è l'oggetto della classe e la classe definisce un operatore di overload di selezione dei membri (- >) che restituisce un puntatore a un altro tipo della classe.(Questa operazione viene discussa più dettagliatamente in Membro della classe Access).
Il compilatore rileva dei nomi nell'ordine, arrestando quando il nome viene trovato:
Ambito blocco corrente se il nome è utilizzato in una funzione, in caso contrario, ambito globale.
Esternamente a ogni ambito blocco di inclusione, inclusi l'ambito più esterno della funzione (che include gli argomenti della funzione.
Se il nome è utilizzato in una funzione membro, l'ambito della classe viene trovato il nome.
Le classi base della classe sono disponibili il nome.
Viene annidato l'ambito di classe (se presenti) e le relative basi disponibili.La ricerca continua fino a trovare l'ambito più esterno della classe interna.
L'ambito globale viene trovato.
Tuttavia, è possibile apportare le modifiche a questo ordine di ricerca come segue:
Nomi preceduti da :: forzare la ricerca per avviare in ambito globale.
Nomi preceduti da classe, structe unione le parole chiave forzano il compilatore per trovare solo classe, struct, o unione nomi.
Nomi a sinistra dell'operatore di risoluzione dell'ambito (::) possono essere solo classe, struct, spazio dei nomi, o unione nomi.
Se il nome fa riferimento a un membro non statico ma viene utilizzato in una funzione membro static, un messaggio di errore viene generato.Analogamente, se il nome si riferisce a un membro non statico in una classe interna, un messaggio di errore viene generato perché le classi incluse non hanno classe interna ciò puntatori.