Zajistit, aby Výjimku tvoří vždy сaught

hlasů
21

Výjimky v C ++ nemusí být chycen (žádné chyby kompilace) pomocí volání funkce. Takže je to na rozhodnutí developera, zda se chytit pomocí try / catch (na rozdíl od v Javě).

Existuje způsob, jak se dá zajistit, že výjimky hozen vždy chycen pomocí try / catch by volající funkci?

Položena 04/08/2008 v 11:01
zdroj uživatelem
V jiných jazycích...                            


7 odpovědí

hlasů
22

Ne.

Viz pragmatický Podívejte se na Výjimka specifikacích z důvodů, proč ne.

Jediný způsob, jak můžete „pomoci“ je to dokumentovat výjimky vaše funkce může hodit, řekněme jako komentář v záhlaví souboru jej deklarovat. To není vynuceno kompilátorem nebo tak něco. Používat revize kódu pro tento účel.

Odpovězeno 04/08/2008 v 11:10
zdroj uživatelem

hlasů
9

Ty by neměly být pomocí výjimku zde. To samozřejmě nejde o výjimečný případ, pokud je třeba ji čeká všude, kam se použít tuto funkci!

Lepším řešením by bylo, aby funkce vrátit instance něčeho takového. V sestavení ladění (za předpokladu vývojářů vykonávat kódové cesty, které jste právě psané), budou získat assert v případě, že zapomenete zkontrolovat, zda je operace uspěl, nebo ne.

class SearchResult
{
  private:
    ResultType result_;
    bool succeeded_;
    bool succeessChecked_;

  public:
    SearchResult(Result& result, bool succeeded)
      : result_(result)
      , succeeded_(succeeded)
      , successChecked_(false)
    {
    }

    ~SearchResult()
    {
      ASSERT(successChecked_);
    }

    ResultType& Result() { return result_; }
    bool Succeeded() { successChecked_ = true; return succeeded_; }
}
Odpovězeno 24/09/2008 v 10:24
zdroj uživatelem

hlasů
4

Mimo rozsah vaší otázky, takže jsem Diskutovali není toto vysílání, ale v Javě tam jsou vlastně 2 typy výjimek, zapsaných a nezapsaných. Základním rozdílem je, že podobně jako v c[++], nemáte chytit nekontrolovanou výjimku.

Pro dobré reference zkusit

Odpovězeno 04/08/2008 v 18:51
zdroj uživatelem

hlasů
2

Chris 'má pravděpodobně nejlepší čistý odpověď na otázku:

Nicméně, jsem zvědavý kořen otázka. V případě, že uživatel by měl vždy zabalit hovor v bloku / catch try, uživatel by měl zvaná funkce skutečně házet výjimky na prvním místě?

To je těžké odpovědět na otázku, aniž by více kontextu, pokud jde o kódové základny v pochybnost. Střelba od boku, myslím, že nejlepší odpovědí je zde zabalit funkci až tak, že se nedoporučuje (ne-li jediný, v závislosti na celkovém stylu výjimkou kódu) veřejné rozhraní dělá try / catch pro uživatele. Pokud jste jen snaží, aby zajistily, že neexistují žádné neošetřené výjimky v kódu, unit testy a revize kódu jsou asi tím nejlepším řešením.

Odpovězeno 05/08/2008 v 05:56
zdroj uživatelem

hlasů
0

Tam byl jednou pokus o přidání dynamické specifikace výjimek k podpisu funkci, ale protože jazyk nemohl prosadit jejich přesnost, oni byli později odepsáno.

V C ++ 11 a dopředu, nyní máme noexcept specifikátor .
Opět platí, že v případě, že podpis je označen hodit, je zde stále není requriement, že byly zpracovány volajícím.


V závislosti na kontextu, můžete zajistit, že výjimečné chování být řešeny prostřednictvím kódování obrazu do systému typu.

Viz: std :: fakultativní jako součást základů knihovny.

Odpovězeno 08/05/2016 v 15:07
zdroj uživatelem

hlasů
0

Existuje způsob, jak se dá zajistit, že výjimky hozen vždy chycen pomocí try / catch by volající funkci?

Připadá mi to poněkud zvláštní, že Java dav - včetně sebe - se snaží, aby se zabránilo zkontrolovat výjimky. Snaží se pracovat svou cestu kolem nuceni chytat Výjimky pomocí RuntimeExceptions .

Odpovězeno 04/08/2008 v 19:14
zdroj uživatelem

hlasů
0

Nebo byste mohli začít házet kritické výjimky. Jistě, výjimku narušení přístupu bude chytit pozornost uživatelů.

Odpovězeno 04/08/2008 v 18:33
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more