☰
  • 首页
  • 规则分类
  • 项目介绍
search
•••

面向派生类的 catch 子句应排在面向基类的 catch 子句之前

9.6.5 ID_try_disorderedHandlers
目录 › next › previous

以派生类对象为参数的 catch 子句应排在以基类对象为参数的 catch 子句之前,否则后面的 catch 子句会失去作用。

示例:

class B {};
class D: public B {};

try {
    ....
} catch (B&) {
    ....
} catch (D&) {  // Non-compliant, unreachable
    ....
}

例中 B 为基类,D 为派生类,D 类异常会被第一个 catch 子句捕获,第二个 catch 子句失去了作用。

应改为:

try {
    ....
} catch (D&) {
    ....
} catch (B&) {  // Compliant
    ....
}

相关

ID_unreachableCode

依据

ISO/IEC 14882:2003 15.3 ISO/IEC 14882:2011 15.3 ISO/IEC 14882:2011 18.3

参考

CWE-561 C++ Core Guidelines E.31 MISRA C++ 2008 15-3-6 SEI CERT ERR54-CPP
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.