Megosztás:


Figyelmeztetés C26447

A függvény deklarálva noexcept van, 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 throw a 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álatukkal noexcept, __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 .

Lásd még

C26440 DECLARE_NOEXCEPT