Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Előfordulhat, hogy ez a fajta függvény nem dob kivételt. Deklarálja a "noexcept"-et.
F.6: Ha a függvény nem dobhat, jelölje meg noexcept
Egyes műveleteknek soha nem szabad kivételeket kivenni. Az implementációknak megbízhatónak kell lenniük, és a lehetséges hibafeltételeket kecsesen kell kezelniük. Nem használhatnak kivételeket a hiba jelzésére. Ez a szabály megjelöli azokat az eseteket, amikor az ilyen műveletek nincsenek explicit módon megjelölve noexcept, ami azt jelenti, hogy kivételeket vethetnek ki, és a fogyasztók nem tehetnek feltételezéseket a megbízhatóságáról.
Fontos, hogy ezek a függvények megbízhatóak legyenek, mivel gyakran építőelemként használják őket a függvények kivételbiztonsági garanciákkal történő implementálásához. A dobó áthelyezési konstruktor arra kényszeríti a Standard Sablontár (STL) tárolóit, hogy visszaesjenek a másolási műveletekbe, csökkentve a futtatókörnyezet teljesítményét.
Kódelemzés neve: SPECIAL_NOEXCEPT.
Megjegyzések
Speciális műveletek:
- destruktorok;
- konstruktorok áthelyezése és hozzárendelési operátorok áthelyezése;
- standard függvények mozgató szemantikával:
std::moveésstd::swap.
A nem szabványos és elavult specifikátorok, mint például
throw()vagydeclspec(nothrow), nem egyenértékűek anoexcept-vel.Explicit megadók
noexcept(false), ésnoexcept(true)megfelelően vannak betartva.
példa
Az eszköz a destruktor kivételével minden függvényre figyelmeztet, mert hiányoznak noexcept.
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'
};
A noexcept ugyanazon szerkezet dekorálásával minden figyelmeztetést eltávolítanak.
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*/}
};