【发布时间】:2010-09-25 09:03:15
【问题描述】:
似乎人们普遍认为异常规范并没有人们想象的那么有用。但我想知道仅使用 std::exception 的规范是否是一个很好的折衷方案:
void someFunction()
throw ( std::exception );
它记录了此方法/函数可能引发异常的事实。
它会确保只抛出从 std::exception 派生的异常,而不是像 std::string 或 int 这样的特殊类。
那么,这会比没有任何规范更好吗?
更新:
关于运行时开销:把它想象成断言的使用。无论运行时开销如何,您都在使用断言,对吗?我知道您通常可以在发布版本中禁用它们,因此也许更好的方法是将异常规范包装在宏中,以便您可以在发布版本中禁用它。比如:
#ifdef DEBUG
#define THROW( exception ) throw ( exception )
#else
#define THROW( exception )
#endif
void someFunction()
THROW( std::exception );
【问题讨论】:
-
不,它不能确定任何事情。那就是问题所在。您承诺不会抛出任何其他内容,您并没有要求编译器验证事实是否如此。