Quando si genera un'eccezione, la funzione si ferma lì e l'esecuzione salta ovunque sia stata rilevata l'eccezione. La tua funzione non restituisce nulla perché la funzione non ritorna affatto.
Si può solo fare
if (avec.empty())
throw domain_error("Cannot operate on empty vector!");
E la funzione si esce lì.
Nota che non è necessario preoccuparsi del valore restituito ("Come può una funzione non restituire nulla?" Ecc.) Perché non è possibile accedere al valore restituito di una funzione che ha gettato (e non ha catturato) un'eccezione anche se provi.
Così, per esempio, se si fa
try {
std::vector<myStruct> vec;
std::vector<myStruct> retval = extract_notworking(vec);
print_vector(retval); // this line is only executed if extract_networking
// does not throw an exception
} catch (const domain_error& e) {
// we can't access retval here so no worries
}
è possibile accedere solo retval
se la funzione restituisce correttamente (vale a dire non buttare). Nell'esempio, la tua funzione verrà generata perché vec
è vuoto, quindi print_vector
non verrà mai chiamato.
Anche se si esegue questa operazione:
std::vector<myStruct> retval;
try {
std::vector<myStruct> vec;
retval = extract_notworking(vec);
print_vector(retval);
} catch (const domain_error& e) {
// we can access retval here but the assignment never happened
}
Poiché la funzione non ha restituito, l'assegnazione del suo valore di ritorno di retval
non è successo, e retval
è ancora perfettamente normale default-costruito vector
che possono usare liberamente. In questo esempio, retval
non è assegnato a e retval
non viene stampato, perché extract_networking
ha generato un'eccezione e l'esecuzione è saltata nel blocco catch
prima che queste due cose potessero accadere.
fonte
2012-03-03 20:18:11
Se si genera un'eccezione, la funzione non viene restituita. Questo è il punto. –
Quindi forse rendere la mia funzione nullo e aggiungere un altro parametro facendo riferimento al mio vettore? – Mihaela
possibile duplicato di [Ritorno dopo aver generato eccezioni] (http://stackoverflow.com/questions/3109943/returning-after-throwing-exceptions) –