【发布时间】:2013-03-21 05:38:02
【问题描述】:
我对析构函数和noexcept 有点困惑。我的理解是,在 C++11 中,任何析构函数,包括用户定义的,都是隐式的 noexcept(true),即使我们来自它的 throw。如果他们出于某种原因希望这样,则必须明确指定noexcept(false)。
我看到的恰恰相反——在 GCC 4.7.2 中,用户定义的析构函数,无论类和析构函数多么原始,都隐含为 noexcept(false)。我在这里想念什么?用户定义的析构函数是否存在一些隐藏的问题?
【问题讨论】:
-
12.4/3:“没有异常规范的析构函数声明被隐式认为具有与隐式声明 (15.4) 相同的异常规范。”即,如果所有成员和基础都具有 noexcept 析构函数,则析构函数仅是
noexcept(true)。
标签: c++ c++11 destructor noexcept