Gotcha #64: Throwing String Literals
Gotcha条款64:抛出String Literals
许多C++编程教本的作者在展示异常机制时都抛出字符文字串(character string literals)信息:
throw "Stack underflow!";
他们知道这种实作手法本应回避,但是他们还是这样做了,因为那只是“教学性示例”。不幸的是,这样做示例就隐含了“模仿这个示例”的建议(译注:毕竟,读者当然会倾向于效仿所看教本中的示例来学习),而这些作者们通常忽视了还要提示读者:“真正照这样做的话,会招致刻意伤害和厄运”。
绝不要抛出string literals作为exception objects(异常对象)。从原理上讲,原因是:这些exception objects最终应该被捕获,而且应该是根据其型别(type)来捕获,而不是根据其值(value)来捕获:
try {
// . . .
}
catch( const char *msg ) {
string m( msg );
if( m == "stack underflow" ) // . . .

博客指出许多C++编程教本在展示异常机制时抛出字符文字串信息,但这是不可取的。抛出string literals作为异常对象,其型别几乎不包含异常信息,比较值也不严密。应设计自定义异常型别,派生自标准异常型别,还需提供寻常的copy和destruction语义。

2569

被折叠的 条评论
为什么被折叠?



