首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向后兼容的noexcept(false)用于析构函数

向后兼容的noexcept(false)用于析构函数
EN

Stack Overflow用户
提问于 2014-07-04 05:21:07
回答 2查看 386关注 0票数 0

直到C++03,析构函数通常被允许抛出任意异常。

然而,在C++11中,所有没有显式异常规范的析构函数默认为noexcept。这可以用noexcept(false)重写,但是预C++11编译器不会接受这段代码。

一种解决方案是通过检查特定于编译器的noexcept(false)来检测对#define的需求,但这仍然限制了此类代码对已知编译器集的适用性。

在С++11和C++03中是否有允许从析构函数中抛出任意异常的可移植方式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-04 05:34:26

您可以使用标准提供的__cplusplus宏执行此操作:

代码语言:javascript
复制
#if __cplusplus >= 201103L                // We are using C++11 or a later version
#define NOEXCEPT_FALSE noexcept(false)
#else
#define NOEXCEPT_FALSE
#endif

然而,更好的办法是永远不要从析构函数中抛出。

票数 1
EN

Stack Overflow用户

发布于 2014-07-04 05:37:43

您不需要依赖“特定于编译器的#define”.

16.8/1应根据执行情况确定下列宏名称:

__cplusplus

在编译__cplusplus翻译单元时,将名称201103L定义为值C++。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24567173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档