try, throw ve catch Deyimleri (C++)
C++'da özel durum işleme uygulamak için , throw
ve catch
ifadelerini kullanırsınıztry
.
İlk olarak, özel durum oluşturabilecek bir try
veya daha fazla deyimi kapsayan bir blok kullanın.
İfade throw
, bir blokta try
olağanüstü bir koşulun (genellikle bir hata) oluştuğunu belirtir. herhangi bir türde bir nesneyi bir ifadenin işleneni throw
olarak kullanabilirsiniz. Genellikle, bu nesne, hata hakkında bilgi iletmek için kullanılır. Çoğu durumda, standart kitaplıkta std::exception
tanımlanan sınıfını veya türetilmiş sınıflardan birini kullanmanızı öneririz. Bunlardan biri uygun değilse, kendi özel durum sınıfınızı öğesinden std::exception
türetmenizi öneririz.
Oluşturulabilecek özel durumları işlemek için, bir bloğun hemen ardından bir try
veya daha fazla catch
blok uygulayın. Her catch
blok işleyebileceği özel durum türünü belirtir.
Bu örnekte bir try
blok ve işleyicileri gösterilmektedir. GetNetworkResource()
Ağ bağlantısı üzerinden veri aldığını ve iki özel durum türünün'den std::exception
türetilen kullanıcı tanımlı sınıflar olduğunu varsayalım. Özel durumların deyimindeki catch
başvuru tarafından const
yakalandığını fark edin. Özel durumları değere göre oluşturmanız ve sabit başvuruya göre yakalamanız önerilir.
Örnek
MyData md;
try {
// Code that could throw an exception
md = GetNetworkResource();
}
catch (const networkIOException& e) {
// Code that executes when an exception of type
// networkIOException is thrown in the try block
// ...
// Log error message in the exception object
cerr << e.what();
}
catch (const myDataFormatException& e) {
// Code that handles another exception type
// ...
cerr << e.what();
}
// The following syntax shows a throw expression
MyData GetNetworkResource()
{
// ...
if (IOSuccess == false)
throw networkIOException("Unable to connect");
// ...
if (readError)
throw myDataFormatException("Format error");
// ...
}
Açıklamalar
Yan tümceden try
sonraki kod, kodun korunan bölümüdür. İfade throw
bir özel durum oluşturur; yani oluşturur. Yan tümceden catch
sonraki kod bloğu özel durum işleyicidir. ve ifadelerindeki türler throw
catch
uyumluysa, oluşan özel durumu yakalayan işleyici budur. Bloklarda catch
tür eşleştirmeyi yöneten kuralların listesi için bkz . Catch Blokları Nasıl Değerlendirilir? catch
deyimi bir tür yerine üç nokta (...) belirtirse, catch
blok her özel durum türünü işler. seçeneğiyle /EHa
derlediğinizde, bunlar C yapılandırılmış özel durumları ve bellek koruması, sıfıra bölme ve kayan nokta ihlalleri gibi sistem tarafından oluşturulan veya uygulama tarafından oluşturulan zaman uyumsuz özel durumları içerebilir. catch
Bloklar eşleşen bir türü bulmak için programda işlendiği için, üç nokta işleyicisi ilişkili try
bloğun son işleyicisi olmalıdır. Dikkatli kullanın catch(...)
; catch bloğu yakalanan özel durumun nasıl işleneceğini bilmediği sürece bir programın devam etmesine izin verme. Genellikle, program yürütme durdurulmadan önce hataları günlüğe kaydetmek ve özel temizleme gerçekleştirmek için bir catch(...)
blok kullanılır.
İşleneni throw
olmayan bir ifade, şu anda işlenmekte olan özel durumu yeniden oluşturur. Özgün özel durumun polimorfik tür bilgilerini koruduğundan, özel durumu yeniden oluştururken bu formu öneririz. Böyle bir ifade yalnızca işleyicide catch
veya işleyiciden çağrılan bir catch
işlevde kullanılmalıdır. Yenidenrown özel durum nesnesi, kopya değil özgün özel durum nesnesidir.
try {
throw CSomeOtherException();
}
catch(...) {
// Catch all exceptions - dangerous!!!
// Respond (perhaps only partially) to the exception, then
// re-throw to pass the exception to some other handler
// ...
throw;
}
Ayrıca bkz.
Özel durumlar ve hata işleme için modern C++ en iyi yöntemleri
Anahtar Sözcükler
İşlenilmeyen C++ Özel Durumları
__uncaught_exception
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