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 deklarálva
noexceptvan, de meghívja function_name függvényt, amely kivételeket okozhat (f.6).
C++ alapvető irányelvek:
F.6: Ha a függvény nem dobhat, deklarálja noexceptnek.
Megjegyzések
Ez a szabály módosít egy másik szabályt, a C26440 DECLARE_NOEXCEPT, amely megpróbálja megtalálni azokat a függvényeket, amelyek jó jelöltek a noexceptmegjelölésre. Ebben az esetben az az elképzelés, hogy ha egy függvényt noexceptmegjelöl, meg kell tartania a szerződését úgy, hogy nem invokált más kódot, amely kivételeket okozhat.
- A Microsoft C++ fordító már kezeli az egyszerű szabálysértéseket, például
throwa függvény törzsében lévő utasításokat (lásd : C4297). - A szabály csak a függvényhívásokra összpontosít. Megjelöli azokat a célokat, amelyek nem
constexpr, és amelyek kivételeket okozhatnak. Más szóval a nem dobás nélküliként való megjelölésük nem történik meg a használatukkalnoexcept,__declspec(nothrow)illetve a dobással(). - A rendszer kihagyja a fordító által létrehozott célfüggvényeket a zaj csökkentése érdekében, mivel a fordító nem mindig biztosít kivétel-specifikációkat.
- Az ellenőrző emellett kihagyja a várt célfüggvények
noexceptspeciális típusait is; ezt a szabályt a C26439 SPECIAL_NOEXCEPT kényszeríti ki.
példa
#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;
}
Ezeket a figyelmeztetéseket a függvény aláírásának eltávolításával háríthatja el noexcept .