SORU
15 EKİM 2009, PERŞEMBE


Fark::: runtime_error vs std std::istisna()

std::runtime_error std::exception arasındaki fark nedir? Her biri için uygun kullanımı nedir? İlk başta neden farklı?

CEVAP
15 EKİM 2009, PERŞEMBE


std::exception özel durum hiyerarşisinde temel sınıf olarak hizmet etmek olan sınıftır. Başka bir kullanım şekli var. Diğer bir deyişle, kavramsal birÖzetsınıf dönem C anlam soyut sınıf olarak tanımlanmamış olsa bile).

std::runtime_error daha özel bir sınıf, std::exception, çeşitli durumlarda atılmış olması amaçlanmıştır azalançalışma zamanıhatalar. Onun iki amacı vardır. Kendisi tarafından atılmış olabilir, ya da std::range_error, std::overflow_error vb çalışma zamanı hatası istisnalar bile daha fazla özel türleri için temel sınıf olarak hizmet verebilir. Kendi özel sınıflar std::runtime_error yanı sıra kendi özel sınıflar std::exception azalan tanımlayabilirsiniz inen tanımlayabilirsiniz.

std::runtime_error standart kütüphane gibi içerir std::logic_error, std::exception azalan da.

Bu hiyerarşi olmasının anlamı kullanıcı C istisna işleme mekanizması tam güç kullanmak için fırsat vermektir. ''Madde polimorfik istisnaları yakalayabilir, kullanıcı yazabilir 'yakalamak' özel durum yakalamak hükümler dışında özel bir alt tür hiyerarşi. catch beri Örneğin, catch (std::runtime_error& e) std::runtime_error ağacı tüm özel durumları yakalar, diğer geçmesine izin (ve daha fazla çağrı yığını fly).

S. S. Tasarım kullanışlı özel bir sınıf hiyerarşisi (kod her noktasında ilgilenen tek istisna tiplerini yakalamak izin verir) önemsiz olmayan bir görevdir. Standart C kütüphane görmek ne olası bir yaklaşım, dilin yazarları tarafından sunuluyor. Gördüğünüz gibi, "çalışma zamanı hataları" ve "mantık hataları" ve kendi özel durum türleri ile oradan devam edelim. tüm özel durum türlerini bölmek için karar verdiler Tabii ki, tasarım olarak daha uygun olabilir ki, hiyerarşi yapısı için alternatif yollar vardır.

Güncelleme: Taşınabilirlik, Linux vs Windows

Loki Astari ve unixman83 aşağıda cevap ve yorumlarında belirtildiği gibi exception sınıf yapıcısı C standardına göre herhangi bir argüman almaz. Microsoft C kurucu exception tartışmasına götürüyor, ama bu standart değil. runtime_error sınıfı bir yapıcı her iki platformlar, Windows ve Linux üzerinde değişkenler (char*) alarak. Taşınabilir olması, daha iyi runtime_error kullanın.

(Ve, projenizin bir şartname kodu Linux üzerinde çalışmasına izin yok diyor çünkü, Linux üzerinde çalıştırmak için asla anlamına gelmez unutmayın.)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Angry Paintballer

    Angry Paintb

    8 Ocak 2012
  • Elly

    Elly

    3 EKİM 2005
  • pissengehen

    pissengehen

    26 EYLÜL 2006