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.
A függvény "noexcept" deklarálható.
C++ Alapvető irányelvek F.6: Ha a függvény nem dobhat, deklarálja noexcept
Ha a kódnak nem kellene kivételeket okoznia, akkor azt a noexcept kijelölővel kell megjelölni. Ez a megjegyzés segít leegyszerűsíteni a hibakezelést az ügyfélkód oldalán, és lehetővé teszi, hogy a fordító több optimalizálást hajtson végre.
Megjegyzések
- A függvény nem dobásnak minősül, ha:
- nem rendelkezik explicit
throwállításokkal; - függvényhívások a törzsében, ha vannak ilyenek, csak olyan függvényeket hívnak meg, amelyek nem valószínű, hogy dobnak:
constexprvagy olyan kivételspecifikációval megjelölt függvények, amelyek nem dobással járó viselkedéssel járnak (beleértve néhány nem szabványos specifikációt is).
- nem rendelkezik explicit
- Nem szabványos és elavult azonosítók, például
throw()a__declspec(nothrow)noexcept. - Explicit megadók
noexcept(false), ésnoexcept(true)megfelelően vannak betartva. - A megjelölt
constexprfüggvények nem okozhatnak kivételeket, és nem elemeznek. - A szabály a lambda kifejezésekre is vonatkozik.
- A logika nem tekinti a rekurzív hívásokat potenciálisan nem dobásmentesnek. Ez a logika a jövőben változhat.
példa
A destruktor kivételével minden függvény figyelmeztetni fog, mert hiányzik a noexcept.
struct S
{
S() {} // C26455, Default constructor may not throw. Declare it 'noexcept'
~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'
};
Ha a noexcept ugyanazt a struktúrát díszíti, az összes figyelmeztetés el lesz távolítva.
struct S
{
S() noexcept {}
~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*/}
};