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
Exception specifications are deprecated in C++11 - do not write exception specifications unless it is to specify that your function is guaranteed not to throw an exception.
Note that actually providing this guarantee is harder than it may seem - Herb Sutter has written many articles and a book on the subject of exceptions and exception safety.
Declaring exceptions is a bad idea. From http://www.gotw.ca/publications/mill22.htm :
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