L'aliasing è quando ci sono diversi nomi (o espressioni) per designare lo stesso oggetto.
L'indirizzamento è quando ci sono ulteriori passaggi per raggiungere l'oggetto.
Entrambi sono solitamente presenti, ma non sempre. Come esempio di aliasing senza indirezione
namespace X {
int x;
}
namespace Y {
using namespace X;
}
X::x
e Y::x
sono due nomi diversi per gli stessi oggetti, ci sono alias e nessun riferimento indiretto è presente.
Come esempio di riferimento indiretto senza alias
int* p = new int;
Per accedere all'oggetto assegnato, devi passare attraverso p con *p
, l'accesso è indiretto e non ci sono alias.
Ma l'indirezione è solitamente presente quando ci sono alias (visibilmente con q=p
, *p
e *q
sono alias, o più o meno nascosti nell'implementazione o nelle regole del linguaggio, vedi riferimenti in C ++ o con il fatto che a[i]
e a[j]
che sono alias se i==j
.)