SORU
20 Temmuz 2011, ÇARŞAMBA


Arasındaki fark try-catch işlevi için sözdizimi

İşlev, son zamanlarda try-catch Bu sözdizimi rastladım.

struct A
{
  int a;

  A (int i) : a(i)  // normal syntax
  {
    try {}
    catch(...) {}
  }

  A ()   // something different
  try : a(0) {}
  catch(...) {}

  void foo ()  // normal function
  try {}
  catch(...) {}
};

Hem 3**. Bunlar, apart tarzı kodlama sözdizimi arasında herhangi bir teknik fark var mı ? Sözdizimi biri üstün herhangi bir yönü ile diğer.

CEVAP
20 Temmuz 2011, ÇARŞAMBA


İlk Kullanımı:
Try bloğunun kapsam Üyesi Başlatma listesi tamamlandıktan sonra başlar, herhangi bir özel Üye Başlatma sırasında atılmışolmayacakBu tarafından yakalandı try-catch bloğu.

İkinci örnek:
Eğer bir istisna Üye Listesi Başlatma sırasında atılan alırsa o zaman durum yakalamak için mümkün olmasını sağlar.

Üçüncü Örnek:
Bunu sağlayan herhangi bir özel durum dan söz arasında başlayan sıkı durun, try bloğu içinde işlevi vücut yakalamak uygun, Değil mi yani herhangi bir özel duruma neden oldu sırasında bağımsız değişkeni geçirmeden(varsa oluşabilir) olmayacak yakaladı bu try-catch bloğu.

Yani Evet disinctly işlevleri sağlarlar ne farklı.


DÜZENLEME:
Bazı kurallar ikinci sözdizimi (- deneyin-fonksiyon blok) kurucular ve yıkıcılar kullanırken dikkat edilecek hususlar:

C Standardına göre,

Eğer catch bloğu değil atmak (ya da yeniden oluşturma orijinal istisna veya atmak yeni bir şey), ve kontrol ulaştığı son catch bloğu bir yapıcı veya yıkıcı, orijinal durum otomatik olarak rethrown.

Basit bir deyişle:
Yapıcı veya yıkıcı-deneyin-blok işleyicisi işlev koduGEREKİRbazı istisna yayan bitiş.

Kılavuz 1:
Kurucu işleyicileri yalnızca tek bir amaç için bir istisna çevirmek için-deneyin-blok fonksiyonu. (Ve belki de günlük ya da başka bir yan etki yapacak.) Başka bir amaç için yararlı değildir.

Yıkıcı bir durum atıyor kötü bir fikir, bir göz Atınhereneden bilmek.
Kılavuz 2:
Yıkıcı-deneyin-blok fonksiyonu herhangi bir pratik kullanımı var. Orada gereken hiç bir şey için onları algılamak için bile olsa " bir şey algılamak yüzünden kötü kod, işleyici çok faydalı birşey yapmak için değil bastırmak dışında.

Klavuzu 3:
Her zaman temiz yönetilmeyen yerel kaynak toplama çalış-blok işleyicileri yapıcı veya yıkıcı vücut, asla yapıcı veya yıkıcı içinde işlev deneyin-blok işleyicileri.


Standardese Hayranları İçin:

C standardı, madde 15.3, paragraf 15:

Eğer return deyiminin işlevi-deneyin-blok yapıcı bir işleyici varsa, program kötü oluşur.

C standardı, madde 15.3, paragraf 16:

Bu durum ele alınması durumunda kontrol fonksiyonu-deneyin-blok yapıcı veya yıkıcı bir işleyici sonuna ulaşırsa yeniden atılır. Aksi takdirde, bir işlevi kontrol işlevi-deneyin-blok için bir işleyici (6.6.3) sonuna ulaştığında verir. Bir işlev deneyin-bloğun sonuna kadar akan hiçbir Değer; Değer döndüren bir fonksiyon tanımsız davranış bu sonuç ile dönüş (6.6.3) eşdeğerdir.


Referanslar:
Şuna bir bakokumak gerekirkaynakheredaha fazla bilgi ve açıklama için.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Ben Schoon

    Ben Schoon

    23 Kasım 2012
  • eHow

    eHow

    27 NİSAN 2006
  • psidot

    psidot

    2 Kasım 2006