Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Funkce je deklarována
noexcept, ale volá funkci function_name , která může vyvolat výjimky (f.6).
Pokyny pro C++ Core:
F.6: Pokud vaše funkce nesmí vyvolat výjimku, deklarujte ji noexcept.
Poznámky
Toto pravidlo změní jiné pravidlo C26440 DECLARE_NOEXCEPT, které se snaží najít funkce, které jsou vhodnými kandidáty na označení jako noexcept. V tomto případě je myšlenka, že jakmile označíte nějakou funkci jako noexcept, musí zachovat její kontrakt tím, že nevyvolá jiný kód, který může vyvolat výjimky.
- Kompilátor Jazyka Microsoft C++ již zpracovává jednoduchá porušení, jako
throwjsou příkazy v těle funkce (viz C4297). - Pravidlo se zaměřuje pouze na volání funkcí. Označí cíle, které nejsou
constexpra které můžou potenciálně vyvolat výjimky. Jinými slovy, nejsou explicitně označeny jako nevyvolání pomocí ,noexcept__declspec(nothrow)nebo throw(). - Cílové funkce generované kompilátorem se přeskočí, aby se snížil šum, protože kompilátor neposkytuje specifikace výjimek vždy.
- Kontrola také přeskočí speciální druhy cílových funkcí, které očekáváme, že implementujete jako
noexcept; toto pravidlo vynucuje C26439 SPECIAL_NOEXCEPT.
Příklad
#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;
}
Tato upozornění můžete opravit odebráním noexcept z podpisu funkce.