小编use*_*050的帖子

C++ 11中默认虚拟析构函数的异常规范是什么?

假设我有:

class Foo
{
public:
   virtual ~Foo()=default;
};
Run Code Online (Sandbox Code Playgroud)

默认析构函数的异常规范是什么?违约的析构函数是否相当于:

   virtual ~Foo() {};
or
   virtual ~Foo() throw() {};
or
   virtual ~Foo() noexcept {};
Run Code Online (Sandbox Code Playgroud)

C++ 11标准的第15.4节说它依赖于析构函数的隐式定义直接调用的函数的异常规范.在这种情况下,没有成员,也没有基类,因此AFAIK没有隐式析构函数直接调用的函数.这是标准中的含糊不清(或遗漏)吗?

当然,这很重要,因为如果它隐式具有throw(),那么所有子类必须使用throw()声明它们的析构函数.不要告诉我在析构函数中抛出异常是个坏主意,我知道.我处理了许多遗留代码,其中根本没有使用异常规范.

作为一个信息点,当我尝试时:

class SubFoo : public Foo
{
public:
   virtual ~SubFoo();
};
Run Code Online (Sandbox Code Playgroud)

我在GCC 4.4中得到了一个错误(不匹配的异常规范)(尽管我承认我可能没有正确的命令行开关),但在使用"11"编译器的XCode 4.3中却没有.

c++ default exception-specification

9
推荐指数
1
解决办法
2857
查看次数

标签 统计

c++ ×1

default ×1

exception-specification ×1