cpp:exception_specifiers

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
cpp:exception_specifiers [2019/05/06 07:50]
cpp:exception_specifiers [2019/05/06 08:50]
gthanos
Line 1: Line 1:
 +===== Δήλωση των εξαιρέσεων που παράγουν οι συναρτήσεις (exception specifiers) =====
 +
 +Κατά τη δήλωση μίας συνάρτησης είναι δυνατόν να ορίσετε εάν αυτή μπορεί να παράγει κάποιου είδους //exception//. Υπάρχουν 3 διαφορετικού τύποι ορισμών οι οποίοι δίνονται παρακάτω:
 +  - ''int functionName() throw()'': Ο συγκεκριμένος ορισμός δηλώνει ότι δεν παράγεται καμία εξαίρεση.
 +  - ''int functionName() throw(std::bad_alloc)'': Ο συγκεκριμένος ορισμός δηλώνει ότι μπορεί να παραχθεί μία εξαίρεση τύπου [[http://en.cppreference.com/w/cpp/memory/new/bad_alloc|std::bad_alloc]].
 +  - ''int functionName() throw(...)'': Ο συγκεκριμένος ορισμός δηλώνει ότι μπορεί να παραχθεί οποιουδήποτε τύπου εξαίρεση.
 +
 +Τους παραπάνω ορισμούς είναι δυνατόν να τους συναντήσετε στις //standard// βιβλιοθήκες της C++. Δεν είναι όμως ευρέως χρησιμοποιούμενοι και η υποστήριξη τους από τους C++ //compilers// είναι συχνά ελλειπής. Δεν συνιστάται η χρήση τους σε κώδικα που γράφετε εσείς, λόγω της ελλειπούς υποστήριξης από την κοινότητα της C++.
 +
 +Στο παρακάτω παράδειγμα, κατά τη μεταγλώττιση, ο //compiler// δεν διαμαρτύρεται για τη μη διαχείριση του //exception// που παράγει η μέθοδος //function1//
 +
 +<code cpp exception_specifiers.cpp>
 +#include <iostream>
 +using namespace std;
 +
 +int function1() throw(std::bad_alloc) {
 +  throw new std::bad_alloc;
 +  return 10;
 +}
 +
 +int main() {
 +  cout << function1() << endl;
 +}
 +</code>
 +
 +/*
 +===== Function try blocks =====
 +*/
 +
 +
 +
 +
 +
 +
 +
  
cpp/exception_specifiers.txt · Last modified: 2019/05/06 07:50 (external edit)