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.
Bu tür bir işlev oluşturmayabilir. 'noexcept' olarak bildirin.
F.6: İşlevinizin atılmaması gerekiyorsa, bunu belirtin noexcept
Bazı işlemler hiçbir zaman özel durum oluşturmamalıdır. Uygulamaları güvenilir olmalı ve olası hata koşullarını düzgün bir şekilde işlemelidir. Hata göstermek için özel durumlar kullanmamalıdır. Bu kural, bu tür işlemlerin açıkça olarak olarak noexceptişaretlenmediği durumlara bayrak ekler. Bu, özel durumlar oluşturabileceği ve tüketicilerin güvenilirliği hakkında varsayımlarda bulunamadıkları anlamına gelir.
Bu işlevlerin güvenilir olması önemlidir çünkü genellikle özel durum güvenliği garantili işlevleri uygulamak için yapı taşları olarak kullanılırlar. Oluşturan bir taşıma oluşturucu, Standart Şablon Kitaplığı (STL) kapsayıcılarını kopyalama işlemlerine geri dönmeye zorlayarak çalışma zamanı performansını düşürür.
Kod analizi adı: SPECIAL_NOEXCEPT
Açıklamalar
Özel işlem türleri:
- Yıkıcı;
- oluşturucuları taşıma ve atama işleçlerini taşıma;
- taşıma semantiğine sahip standart işlevler:
std::movevestd::swap.
gibi
throw()standart olmayan ve güncel olmayan tanımlayıcılar iledeclspec(nothrow)eşdeğernoexceptdeğildir.Açık tanımlayıcılar
noexcept(false)venoexcept(true)uygun şekilde dikkate alınıyor.
Örnek
Araç, eksik noexceptolduğu için yok edici dışındaki tüm işlevlerde uyarır.
struct S
{
~S() {}
S(S&& s) {/*impl*/} // C26439, This kind of function may not throw. Declare it 'noexcept' (f.6)
S& operator=(S&& s) {/*impl*/} // C26439, This kind of function may not throw. Declare it 'noexcept' (f.6)
S(const S& s) {/*impl*/} // C26440, This function can be declared 'noexcept'
S& operator=(const S& s) {/*impl*/} // C26440, This function can be declared 'noexcept'
};
noexcept Aynı yapıyı süsledikten sonra tüm uyarılar kaldırılır.
struct S
{
~S() {}
S(S&& s) noexcept {/*impl*/}
S& operator=(S&& s) noexcept {/*impl*/}
S(const S& s) noexcept {/*impl*/}
S& operator=(const S& s) noexcept {/*impl*/}
};
Ayrıca bkz.
C26455
F.6: İşlevinizin atılmaması gerekiyorsa, bunu belirtin noexcept