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

禁用动态异常说明

7.28 ID_forbidThrowSpecification
目录 › next › previous

用 throw 关键字声明的“动态异常说明(dynamic exception specification)”已过时。

动态异常说明将所有可能抛出的异常详细列出,如果与实际抛出的异常不一致,会使程序异常终止。

当抛出的异常有变化时,需要根据调用关系修改所有相关函数的异常说明,尤其是牵扯到外部不可控代码时,会大幅增加维护成本,而且动态异常说明具有一定的运行时开销,现已从 C++17 标准中移出。

示例:

int foo() throw(A, B, C);   // Non-compliant, drop ‘throw(A, B, C)’

例外:

int bar() throw();   // Let it go?

throw() 与 noexcept 等价,C++17 保留了 throw(),但不建议继续使用,审计工具不妨通过配置决定是否放过这种方式。

配置

forbidEmptyThrowSpecification: 是否放过空 throw 异常说明

依据

ISO/IEC 14882:2011 D.4-deprecated ISO/IEC 14882:2017 D.3-deprecated

参考

C++ Core Guidelines E.30
Copyright©2024 360 Security Technology Inc., Licensed under the Apache-2.0 license.