C ++我是否需要写抛子句到处功能?(C++ Do I need to write throw cl

2019-09-18 18:01发布

之前

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

这是,例如, 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...
};

这是正确的吗? 把它仅适用于主声明? 谢谢

Answer 1:

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

例外的规格是坏的。 很难有哪个正确执行功能的任何编译器。 因为C ++标准11他们已被弃用。 事实上异常规范被认为即使他们是C ++ 03标准的一部分,一个失败的试验。

良好的阅读:
语用看异常规范



Answer 2:

声明例外是一个坏主意。 从http://www.gotw.ca/publications/mill22.htm :

道德#1:不要写异常规范。
道德#2:可能除了空单,但如果我是你,我会避免甚至认为。



Answer 3:

异常规范不赞成使用C ++ 11 -不写异常规范,除非它是指定的功能保证不会抛出异常。

需要注意的是实际提供这一保证是难度比它看起来可能-香草萨特写了许多文章和书上的异常和异常安全的主题。



文章来源: C++ Do I need to write throw clause for a function everywhere?