In che modo l'indirezione è diversa dall'aliasing?

2

Prendi da wikipedia , l'aliasing è definito come l'accesso a una posizione di dati attraverso nomi diversi.

Tratto anche da wikipedia , il riferimento indiretto è definito come riferimento a qualcosa "usando un nome, un riferimento o un contenitore al posto del valore stesso ". Mi sto perdendo qualcosa qui - Sono questi due uno e lo stesso? In caso contrario, come sono diversi?

    
posta George Newton 21.12.2013 - 09:37
fonte

2 risposte

5

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 .)

    
risposta data 21.12.2013 - 10:47
fonte
1

A mio parere, "indirezione" è un termine molto generico che definisce ogni tipo di forma di utilizzo di nomi alternativi, riferimenti, contenitori, wrapper e così via - ogni tipo di accesso non diretto. L'aliasing è IMHO un caso speciale di indirezione, perché l'aliasing è specificamente sull'uso di nomi diversi, nient'altro.

Ad esempio, durante la programmazione, l'accesso a una libreria o a un dispositivo tramite un'interfaccia pubblica può consentire di aggiungere una sorta di riferimento "dietro le quinte", all'interno della libreria, ma senza alcun cambiamento visibile nell'API (o nei nomi) da il punto di vista di un utente di quella libreria. Ad esempio, pensa a una libreria di rete che consente di attivare o disattivare un "proxy". L'interfaccia pubblica continua a rimanere la stessa, quindi non c'è "aliasing" qui, ma è in effetti una forma di riferimento indiretto.

    
risposta data 21.12.2013 - 10:34
fonte

Leggi altre domande sui tag