Διασφάλιση ότι οι εξαιρέσεις είναι πάντα сaught

ψήφοι
21

Εξαιρέσεις σε C ++ δεν χρειάζεται να αλιεύονται (σφάλματα χρόνου μεταγλώττισης) από τη λειτουργία κλήσης. Έτσι είναι μέχρι την κρίση προγραμματιστή αν θα τους πιάσει χρησιμοποιώντας δοκιμή / αλιευμάτων (σε αντίθεση με Java).

Είναι ένας τρόπος που μπορείτε να εξασφαλίσετε ότι οι εξαιρέσεις που ρίχνονται πάντα αλιευθεί με δοκιμή / αλιευμάτων από τη λειτουργία κλήσης εκεί;

Δημοσιεύθηκε 04/08/2008 στις 11:01
πηγή χρήστη
Σε άλλες γλώσσες...                            


7 απαντήσεις

ψήφοι
22

Οχι.

Δείτε μια ρεαλιστική ματιά στο Εξαίρεση Προδιαγραφές για λόγους για τους οποίους δεν είναι.

Ο μόνος τρόπος για να «βοηθήσει» είναι να καταγράψει τις εξαιρέσεις λειτουργία σας μπορεί να ρίξει, ας πούμε σαν ένα σχόλιο στο αρχείο κεφαλίδας που δηλώνει. Αυτό δεν επιβάλλεται από τον compiler ή οτιδήποτε άλλο. Χρησιμοποιήστε αξιολογήσεις κώδικα για το σκοπό αυτό.

Απαντήθηκε 04/08/2008 στις 11:10
πηγή χρήστη

ψήφοι
9

Δεν θα πρέπει να χρησιμοποιείτε μια εξαίρεση εδώ. Αυτό προφανώς δεν είναι μια εξαιρετική περίπτωση αν πρέπει να το περιμένουμε όπου κι αν χρησιμοποιήσετε αυτή τη λειτουργία!

Μια καλύτερη λύση θα ήταν να πάρετε τη λειτουργία για να επιστρέψει ένα παράδειγμα για κάτι τέτοιο. Σε εκδόσεις εντοπισμού σφαλμάτων (υποθέτοντας ότι οι προγραμματιστές ασκήσουν μονοπάτια κώδικα που έχουμε γράψει μόνο), θα πάρετε μια διεκδικούν, αν ξεχάσετε να ελέγξετε αν η λειτουργία καταφέρει ή όχι.

class SearchResult
{
  private:
    ResultType result_;
    bool succeeded_;
    bool succeessChecked_;

  public:
    SearchResult(Result& result, bool succeeded)
      : result_(result)
      , succeeded_(succeeded)
      , successChecked_(false)
    {
    }

    ~SearchResult()
    {
      ASSERT(successChecked_);
    }

    ResultType& Result() { return result_; }
    bool Succeeded() { successChecked_ = true; return succeeded_; }
}
Απαντήθηκε 24/09/2008 στις 10:24
πηγή χρήστη

ψήφοι
4

Έξω από το πεδίο εφαρμογής της ερώτησής σας, έτσι δεν αμφισβητούν αυτά απόσπαση αυτό, αλλά σε Java στην πραγματικότητα υπάρχουν 2 τύποι των εξαιρέσεων, ελεγχόμενες και μη ελεγχόμενες. Η βασική διαφορά είναι ότι, όπως και σε c[++], δεν έχετε να πάρετε μια ανεξέλεγκτη εξαίρεση.

Για μια καλή αναφορά δοκιμάσετε αυτό

Απαντήθηκε 04/08/2008 στις 18:51
πηγή χρήστη

ψήφοι
2

Chris »έχει ίσως την καλύτερη καθαρή απάντηση στο ερώτημα:

Ωστόσο, είμαι περίεργος για τη ρίζα του ζητήματος. Εάν ο χρήστης θα πρέπει πάντα να τυλίξετε την κλήση σε ένα μπλοκ try / catch, θα πρέπει η λειτουργία χρήστη που ονομάζεται πραγματικά να ρίχνουν εξαιρέσεις στην πρώτη θέση;

Αυτή είναι μια δύσκολη ερώτηση για να απαντήσει, χωρίς περισσότερη πλαίσιο σχετικά με τον κώδικα βάσης στην ερώτηση. Σκοποβολή από το ισχίο, νομίζω ότι η καλύτερη απάντηση είναι να τυλίξετε τη λειτουργία έως έτσι ώστε η συνιστώμενη (αν όχι μόνο, ανάλογα με το γενικό ύφος εξαίρεση του κώδικα) δημόσια διασύνδεση κάνει τη δοκιμή / αλιευμάτων για το χρήστη. Αν είστε απλώς προσπαθεί να διασφαλίσει ότι δεν υπάρχουν unhandled εξαιρέσεις στον κώδικά σας, δοκιμές μονάδα και αναθεώρηση κώδικα είναι ίσως η καλύτερη λύση.

Απαντήθηκε 05/08/2008 στις 05:56
πηγή χρήστη

ψήφοι
0

Υπήρχε κάποτε μια προσπάθεια για να προσθέσετε δυναμικές προδιαγραφές, εκτός από την υπογραφή μιας συνάρτησης, αλλά δεδομένου ότι η γλώσσα δεν θα μπορούσε να επιβάλει την ακρίβειά τους, είχαν στη συνέχεια αποσβένονται.

Στην C ++ 11 και προς τα εμπρός, τώρα έχουμε το προσδιοριστικό noexcept .
Και πάλι, αν η υπογραφή έχει επισημανθεί για να ρίξει, δεν υπάρχει ακόμα requriement ότι πρέπει να γίνεται από τον καλούντα.


Ανάλογα με το πλαίσιο, μπορείτε να εξασφαλίσετε ότι εξαιρετική συμπεριφορά να γίνεται από την κωδικοποίηση του σε σύστημα τύπου.

Δείτε: std :: προαιρετικά ως μέρος των βασικών στοιχείων της βιβλιοθήκης.

Απαντήθηκε 08/05/2016 στις 15:07
πηγή χρήστη

ψήφοι
0

Είναι ένας τρόπος που μπορείτε να εξασφαλίσετε ότι οι εξαιρέσεις που ρίχνονται πάντα αλιευθεί με δοκιμή / αλιευμάτων από τη λειτουργία κλήσης εκεί;

Το βρίσκω κάπως αστείο, ότι το πλήθος Java - συμπεριλαμβανομένου και εμού - προσπαθεί να αποφύγει έλεγχο εξαιρέσεις. Προσπαθούν να συνεχίσουν την πορεία τους γύρω αναγκάζονται να πιάσει Εξαιρέσεις από τη χρήση RuntimeExceptions .

Απαντήθηκε 04/08/2008 στις 19:14
πηγή χρήστη

ψήφοι
0

Εναλλακτικά, μπορείτε να αρχίσετε να ρίχνουν κρίσιμες εξαιρέσεις. Σίγουρα, μια εξαίρεση παραβίαση πρόσβασης θα πιάσει την προσοχή των χρηστών σας.

Απαντήθηκε 04/08/2008 στις 18:33
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more