Catch Blokları Nasıl Değerlendirilir (C++)
Genel olarak std::exception'dan türetilen türler oluşturulması önerilse de, C++ her türden özel durumlar oluşturmanıza olanak tanır. C++ özel durumu, atılan özel durumla aynı türü belirten bir catch
işleyici veya herhangi bir özel durum türünü yakalayabilen bir işleyici tarafından yakalanabilir.
Oluşturulan özel durumun türü temel sınıfı (veya sınıfları) da olan bir sınıfsa, özel durum türünün temel sınıflarını kabul eden işleyiciler ve özel durum türünün başvuruları tarafından yakalanabilir. Özel durum bir başvuru tarafından yakalandığında oluşturulan gerçek özel durum nesnesine bağlanır; aksi takdirde bir kopya (işlevin bağımsız değişkeniyle hemen hemen aynı) olur.
Bir özel durum oluştuğunda, aşağıdaki işleyici türleri catch
tarafından yakalanabilir:
Herhangi bir türü kabul edebilen bir işleyici (üç nokta sözdizimini kullanarak).
Özel durum nesnesiyle aynı türü kabul eden bir işleyici; çünkü bu bir kopyadır
const
vevolatile
değiştiriciler yoksayılır.Özel durum nesnesiyle aynı türe yapılan başvuruyu kabul eden bir işleyici.
Özel durum nesnesiyle aynı türde veya
volatile
biçimine başvuru kabul eden birconst
işleyici.Özel durum nesnesiyle aynı türdeki bir temel sınıfı kabul eden bir işleyici; bir kopya
const
olduğundan vevolatile
değiştiriciler yoksayılır.catch
Bir temel sınıfın işleyicisi, türetilmiş sınıf için işleyicidencatch
önce olmamalıdır.Özel durum nesnesiyle aynı türden temel sınıf başvurusunu kabul eden bir işleyici.
Özel durum nesnesiyle aynı türdeki bir
const
temel sınıfa veyavolatile
biçimine başvuru kabul eden bir işleyici.Oluşturulan bir işaretçi nesnesinin standart işaretçi dönüştürme kurallarıyla dönüştürülebileceği bir işaretçiyi kabul eden bir işleyici.
İşleyicilerin görünme sırası catch
önemlidir, çünkü belirli try
bir bloğun işleyicileri görünüm sırasına göre incelenir. Örneğin, temel sınıfa yönelik bir işleyicisi türetilmiş sınıfa yönelik bir işleyiciden önce yerleştirmek hatadır. Eşleşen catch
bir işleyici bulunduktan sonra, izleyen işleyiciler incelenmez. Sonuç olarak, üç nokta catch
işleyicisi bloğu için try
son işleyici olmalıdır. Örnek:
// ...
try
{
// ...
}
catch( ... )
{
// Handle exception here.
}
// Error: the next two handlers are never examined.
catch( const char * str )
{
cout << "Caught exception: " << str << endl;
}
catch( CExcptClass E )
{
// Handle CExcptClass exception here.
}
Bu örnekte, incelenen tek işleyici üç nokta catch
işleyicisidir.
Ayrıca bkz.
Özel durumlar ve hata işleme için modern C++ en iyi yöntemleri
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin