Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

C++ Do I need to write throw clause for a function everywhere?

Before

Consider to have a class and a global function:

This is, for example, usefulfuncts.hpp

void dosome(int a, int b) throw (std::exception);

This is usefulfuncts.cpp

void dosome(int a, int b) throw (std::exception) {
   //...
}

And this is aclass.hpp

class aclass {
   // Members...
   friend void dosome(int a, int b) throw (std::exception);
   // Members...
};

After (what I would like that to be)

Ok! I would like to understand if it is strictly necessary to write everytime the throw clause. So for example can I do this?

This is usefulfuncts.hpp

void dosome(int a, int b) throw (std::exception);

This is usefulfuncts.cpp

void dosome(int a, int b) { /* OMITTING IT! */
   //...
}

And this is aclass.hpp

class aclass {
   // Members...
   friend void dosome(int a, int b); /* OMITTING IT */
   // Members...
};

Is this right? To put it only in the main declaration? Thanks

like image 443
Andry Avatar asked Dec 04 '22 15:12

Andry


2 Answers

Omitting a exception specification means that your function can throw any exception.

Exceptions specifications are bad. There are hardly any compilers which implement the feature correctly. They have been deprecated since the C++11 Standard. In fact Exception specifications were considered a failed experiment even while they were a part of the C++03 standard.

Good Read:
A Pragmatic Look at Exception Specifications

like image 167
Alok Save Avatar answered Dec 09 '22 15:12

Alok Save


Declaring exceptions is a bad idea. From http://www.gotw.ca/publications/mill22.htm :

Moral #1: Never write an exception specification.
Moral #2: Except possibly an empty one, but if I were you I’d avoid even that.

like image 22
David Hammen Avatar answered Dec 09 '22 16:12

David Hammen