C++ Gotchas 条款64:抛出String Literals

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

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" ) // . . .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值