Usando C ++ mi piacerebbe fare qualcosa sulla falsariga di:
- Cerca di ottenere un riferimento a qualcosa, ad esempio in una mappa
- Se lancia, ritorna subito
- Altrimenti, vai e usa il riferimento
Tuttavia, poiché non possiamo dichiarare un oggetto di riferimento senza inizializzarlo in C ++, non possiamo farlo direttamente.
Ad esempio, se fossi felice di passare per valore, potrei fare:
std::map<char, int> mymap {...};
int x;
try {
x = m.at('a');
} catch (out_of_range& e) {
return;
}
// do something with x
Tuttavia, poiché ho bisogno di un riferimento, dovrei fare quanto segue che non verrà compilato.
std::map<char, int> mymap {...};
int& x;
try {
x = m.at('a');
} catch (out_of_range& e) {
return;
}
// do something with x
Quindi le opzioni che posso vedere sono (1), utilizzare un puntatore, che vorrei evitare, o (2), utilizzare un metodo di mappa diverso che si traduce in un codice più dettagliato, come ad esempio:
std::map<char, int> mymap {...};
auto x_it = m.find('a');
if (x_it == m.end()) {
return;
}
int& x = x_it->second;
// do something with x
Sono quelle le uniche opzioni o, c'è un altro modo per farlo in modo ordinato?