4

考虑有一个类和一个全局函数:

例如,这是usefulfuncts.hpp

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

这是usefulfuncts.cpp

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

这是aclass.hpp

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

之后(我希望是什么)

行!我想了解是否有必要每次都写该throw子句。例如,我可以这样做吗?

这是usefulfuncts.hpp

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

这是usefulfuncts.cpp

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

这是aclass.hpp

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

这是正确的吗?仅将其放在主要声明中?谢谢

4

3 回答 3

12

省略异常规范意味着您的函数可以抛出任何异常。

异常规范不好。几乎没有任何编译器可以正确实现该功能。自 C++11 标准以来,它们已被弃用。事实上,异常规范被认为是一个失败的实验,即使它们是 C++03 标准的一部分。

好读物:
对异常规范的务实看法

于 2012-06-29T08:50:06.830 回答
3

声明异常是一个坏主意。来自http://www.gotw.ca/publications/mill22.htm

道德#1:永远不要编写异常规范。
道德#2:除了可能是一个空的,但如果我是你,我什至会避免。

于 2012-06-29T08:53:42.990 回答
1

异常规范在 C++11 中已弃用- 不要编写异常规范,除非要指定您的函数保证不会引发异常。

请注意,实际上提供这种保证比看起来更难——Herb Sutter 写了很多关于异常和异常安全主题的文章一本书

于 2012-06-29T08:53:57.530 回答