İstisnalar her zaman сaught olmalarının sağlanması

oy
21

C ++ İstisnalar çağıran işlevi tarafından (hiçbir derleme zamanı hataları) yakalanmak gerekmez. Bu yüzden (Java aksine) try / catch kullanarak onları yakalamak isteyip geliştiricinin kararına bağlı.

bir arama işlevi tarafından deneyin / catch kullanarak atılan istisnalar her zaman yakalanmış emin bir yolu var mı?

Oluştur 04/08/2008 saat 11:01
kaynak kullanıcı
Diğer dillerde...                            


7 cevaplar

oy
22

Yok hayır.

Bkz İstisna şartnamede yer alan Pragmatik Look neden nedenlerle.

Eğer "yardım" tek yolu bu başlık dosyasında bir açıklama deklare olarak işlev atabilir istisnalar demek belgelenmektedir. Bu derleyici veya şey tarafından zorlanmaz. bu amaçla kod incelemeler kullanın.

Cevap 04/08/2008 saat 11:10
kaynak kullanıcı

oy
9

Burada bir istisna kullanarak olmamalıdır. Eğer bu işlevi kullanmak her yerde bekliyor gerekiyorsa açıkçası bu istisnai bir durum değildir!

Daha iyi bir çözüm böyle bir şey bir örneğini döndürmek için işlevini almak olacaktır. Onlar operasyon succeded olup olmadığını kontrol etmek unutursanız hata ayıklama (varsayarak geliştiriciler onlar sadece yazdım kod yollarını egzersiz) oluşturur, bunlar bir sav ileri alırsınız.

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_; }
}
Cevap 24/09/2008 saat 10:24
kaynak kullanıcı

oy
4

Sorunuzun kapsamı bu yüzden bu gönderme değil tartışılan ama Java istisnalar 2 tip aslında var dışında, kontrol ve kontrolsüz. Temel fark çok gibi, yani c[++], bir kontrolsüz durum yakalamak zorunda değilim.

İyi bir referans için bu deneyin

Cevap 04/08/2008 saat 18:51
kaynak kullanıcı

oy
2

Chris 'muhtemelen sorunun en iyi saf cevabı var:

Ancak, sorunun köküne merak ediyorum. Kullanıcı olursa her zaman bir deneme / yakalama bloğunda çağrıyı sarın, kullanıcı adı verilen işlev gerçekten ilk etapta durumlar atma olmalıdır?

Bu, söz konusu kod tabanı ile ilgili daha fazla bağlam olmadan cevap vermek zor bir sorudur. Kalçalarından Atış, burada en iyi yanıtı işlevini tamamlamayı düşünüyorum böyle tavsiye (yoksa sadece kod genel istisna stiline bağlı olarak) Kamu arayüz try / catch yaptığı için kullanıcı. Eğer sadece kodunda hiçbir işlenmeyen istisna var olmasını sağlamak için çalışıyorsanız, birim testleri ve kod incelemesi muhtemelen en iyi çözümdür.

Cevap 05/08/2008 saat 05:56
kaynak kullanıcı

oy
0

Orada eklemek için bir girişim zamanlar dinamik istisna özelliklere bir işlevin imza, ama dil onların doğruluğunu değil uygulamak beri, daha sonra amorti bulundu.

İleri C ++ 11 ve olarak, şimdi var noexcept belirtici .
Imza atmak üzere işaretlenmiş ise yine bu arayan tarafından ele alınması hala requriement yoktur.


Bağlama bağlı olarak, bu istisnai davranışlar tipi sisteme içine kodlama tarafından ele sağlayabilirsiniz.

Bkz: std :: opsiyonel kütüphane temelleri parçası olarak kullanılabilir.

Cevap 08/05/2016 saat 15:07
kaynak kullanıcı

oy
0

bir arama işlevi tarafından deneyin / catch kullanarak atılan istisnalar her zaman yakalanmış emin bir yolu var mı?

- Java kalabalık olduğu, oldukça komik buluyorum kendim dahil - işaretli İstisnalar önlemek için çalışıyor. Onlar kullanarak İstisnalar yakalamak zorunda olan yollarını çalışmak için çalışıyoruz RuntimeExceptions .

Cevap 04/08/2008 saat 19:14
kaynak kullanıcı

oy
0

Yoksa kritik durumlar atma başlatabilir. Şüphesiz, bir erişim ihlali özel olacak yakalamak için kullanıcıların dikkatini.

Cevap 04/08/2008 saat 18:33
kaynak kullanıcı

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