Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

throw() bez parametara pri deklarisanju funkcije

[es] :: C/C++ programiranje :: throw() bez parametara pri deklarisanju funkcije

[ Pregleda: 2799 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
217.26.79.*

ICQ: 208550327


+14 Profil

icon throw() bez parametara pri deklarisanju funkcije16.10.2007. u 23:25 - pre 201 meseci
Evo primera:

Code:

void MojaFunkcija() throw()
{
       // bla bla
}


Kako ona 'baca' izuzetak?

Da li ga catch - ujem sa catch(...) posto izuzetak nije naveden?
EOF
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.vlayko.co.yu.



+1 Profil

icon Re: throw() bez parametara pri deklarisanju funkcije17.10.2007. u 07:37 - pre 201 meseci
Ovako deklarisana funkcija ne sme da baca izuzetke. Ako ga ipak baci, onda se program prekida, tj. poziva se unexpected)() koja poziva terminate() a ova opet abort().
Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: throw() bez parametara pri deklarisanju funkcije17.10.2007. u 08:26 - pre 201 meseci
Citat:
karas: Ovako deklarisana funkcija ne sme da baca izuzetke. Ako ga ipak baci, onda se program prekida, tj. poziva se unexpected)() koja poziva terminate() a ova opet abort().
Ako je pri deklaraciji funkcije naveden throw bez argumenata onda to znači da takva funkcija ne bi trebala bacati nikakve iznimke. Obično se onda taj throw i izostavi.

Ovo je na neki način samo podsjetnik programerima ukoliko imaju veći broj funkcija koje bacaju iznimke, pa onda unutar tog throw-a pri deklaraciji funkcije navedu sve tipove iznimki koje ta funkcija može baciti.

Ipak, u svakom slučaju je preporučljivo zaštiti se i s catch(...)
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.vlayko.co.yu.



+1 Profil

icon Re: throw() bez parametara pri deklarisanju funkcije17.10.2007. u 09:22 - pre 201 meseci
Citat:

itf: Ako je pri deklaraciji funkcije naveden throw bez argumenata onda to znači da takva funkcija ne bi trebala bacati nikakve iznimke. Obično se onda taj throw i izostavi.

Hm, zašto onda C++ Primer kaže:
Citat:

If a function declaration does not specify an exception specification, the function can throw exceptions of any type.


Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
217.26.79.*

ICQ: 208550327


+14 Profil

icon Re: throw() bez parametara pri deklarisanju funkcije17.10.2007. u 10:26 - pre 201 meseci
Hvala momci! Inace, Visual Studio daje warning ako se baci izuzetak funkciji koja ima u deklaraciji 'sufiks' throw().

Mada, ipak mi se cini da throw() i izostavljanje nije isto! Jer, kada se throw() izostavi, nema warninga!

Primer ( VS 2003 ), izostavite throw() i videcete da nema warninga :)

Code:


#include <iostream>

int funkcija(int a) throw()
{
    if( a > 0 )
        throw "Greska";
}

void main()
{
    try
    {
    funkcija(5);
    }
    catch (char * a)
    {
    std::cout << a;
    }
}


EOF
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: throw() bez parametara pri deklarisanju funkcije17.10.2007. u 10:36 - pre 201 meseci
To je sve stvar primjene i tvoje interpretacije. Ako redom pišeš prototipe funkcija i za svaku navodiš koje iznimke može da baci onda je (barem meni) na neki način logično da ako nisi ništa napisao da takva funkcija ništa ni ne baca.
 
Odgovor na temu

karas

Član broj: 5574
Poruke: 482
*.vlayko.co.yu.



+1 Profil

icon Re: throw() bez parametara pri deklarisanju funkcije17.10.2007. u 11:20 - pre 201 meseci
throw() znači da funkcija ne baca izuzetke a izostanak throw() deklaracije da funkcija može da baci bilo koji izuzetak, str. 376 u The C++ Programming Language, 3rd edition. Zato se VS tako i ponaša.
Možda je to tako izvedeno kako bi se biblioteke pisane dok nije postojala ova konstrukcija jezika uklopile bez izmena.

Sveti Avgustin: "Dobar hrišćanin treba da se kloni matematičara i svih onih koji daju lažna proročanstva. Postoji opasnost da su matematičari već sklopili pakt sa Đavolom, da pomrače čovekov um i da ga okuju okovima pakla."
 
Odgovor na temu

itf
Zagreb

Član broj: 59794
Poruke: 993
161.53.237.*



+9 Profil

icon Re: throw() bez parametara pri deklarisanju funkcije17.10.2007. u 11:58 - pre 201 meseci
Citat:
karas: throw() znači da funkcija ne baca izuzetke a izostanak throw() deklaracije da funkcija može da baci bilo koji izuzetak, str. 376 u The C++ Programming Language, 3rd edition. Zato se VS tako i ponaša.
Možda je to tako izvedeno kako bi se biblioteke pisane dok nije postojala ova konstrukcija jezika uklopile bez izmena.
U svakom slučaju slažem se sa citatom iz knjige i to tako i jest, no ono što sam pisao odnosi se na interpretacije.

iako throw() znači da funkcija ne baca ništa ja to ionako nikad ne pišem jer je to jednostavno... nepotreban posao ;)
 
Odgovor na temu

glorius
Damir Nikolic
C++ developer
SR

Član broj: 4366
Poruke: 428
217.26.79.*

ICQ: 208550327


+14 Profil

icon Re: throw() bez parametara pri deklarisanju funkcije17.10.2007. u 22:03 - pre 201 meseci
Ehej, evo mesta gde bi se throw() mogao iskoristiti...

class Exception
{
UradiNeshtoKadaDodjeDoIzuzetka() throw () { ... }
};

Ne ocekuje se da klasa koja oznacava izuzetak u svojim metodama negde 'zezne' stvar... Mada, i to je mozda moguce :)

Mada, i ovo deluje kao bespotrebno ali, u slozenim programima mozda i ima smisla...

Exception couse the exception... wierd :P

Ah da.. prvi put se sretoh sa ovim pojmom ( throw() ) u knjizi

The C++ Standard Library: A Tutorial and Reference - Nicolai M. Josuttis

Simpaticna knjiga koja objasnjava STL sa poooodooosta primera.
EOF
 
Odgovor na temu

[es] :: C/C++ programiranje :: throw() bez parametara pri deklarisanju funkcije

[ Pregleda: 2799 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.