Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İşlev bildirilir
noexcept, ancak özel durumlar oluşturabilecek işlev function_name çağırır (f.6).
C++ Temel Yönergeleri:
F.6: Fonksiyonunuzun throw etmemesi gerekiyorsa, onu noexcept olarak bildirin.
Açıklamalar
Bu kural, adlı başka bir kuralı düzeltmektedir. Bu durumda, bir işlevi olarak noexceptişaretledikten sonra, özel durumlar oluşturabilecek diğer kodları çağırmayarak sözleşmesini tutması gerekir.
- Microsoft C++ derleyicisi, işlev gövdesindeki deyimler gibi
throwbasit ihlalleri zaten işler (bkz . C4297). - Kural yalnızca işlev çağrılarına odaklanır. Olmayan ve özel durumlar oluşturabilecek hedefleri
constexprişaretler. Başka bir deyişle, ,noexceptveya throw() kullanılarak__declspec(nothrow)açıkça atılmayan olarak işaretlenmez. - Derleyici tarafından oluşturulan hedef işlevler, özel durum belirtimleri her zaman derleyici tarafından sağlanmadığından gürültüyü azaltmak için atlanır.
- Denetleyici ayrıca, uygulamanızı
noexceptbeklediğimiz özel hedef işlev türlerini de atlar; bu kural C26439 SPECIAL_NOEXCEPT tarafından uygulanır.
Örnek
#include <vector>
#include <string>
#include <istream>
std::vector<std::string> collect(std::istream& is) noexcept
{
std::vector<std::string> res;
for (std::string s; is >> s;) // C26447, `operator bool()` can throw, std::string's allocator can throw
res.push_back(s); // C26447, `push_back` can throw
return res;
}
İşlev imzasından kaldırarak noexcept bu uyarıları düzeltebilirsiniz.