A volte, quando sto programmando in C++, vorrei che ci fosse un valore undefined
per ogni variabile come Javascript !. Per esempio, quando sto tornando un valore per l'elemento out-of-bounds di un array, è stato utile per restituire un undefined
invece di lanciare un'eccezione, o:Restituzione di un riferimento non valido
template <typename T, int SIZE>
class MyArray
{
T arr[SIZE];
static T badref;
public:
T &operator[](int i)
{
if (i >=0 && i < SIZE)
return arr[i];
else
throw std::string("OUT-OF-BOUNDS"); // or: return badref; !!
}
};
Un altro sporco (a mio parere) l'opzione sta restituendo un riferimento di una variabile pre-defind come variabile di riferimento errata. So che non possiamo assegnare null
o qualcosa di simile a una variabile di riferimento.
C'è un altro modello ben formato per restituire un riferimento in cui il chiamante ha la possibilità di scoprire che il valore restituito non è valido?
EDIT: Non sto intendo un pointer
Sì, si chiama un puntatore. In alternativa, 'boost :: opzionale'. – chris
Almeno rendere statico l'oggetto badref, quindi non occuperà spazio in ogni MyArray creato. Ma sono d'accordo, è brutto. In un codice generico come quello vorrei piuttosto lanciare un'eccezione – john
@john: Sì, l'ho modificato. – deepmax