有没有办法告诉MSVC编译器,虚拟函数永远不会抛出?

时间:2015-02-06 12:25:51

标签: c++ visual-c++

我有一些抽象的课程:

struct Interface
{
    virtual void Foo() = 0;
};

我想将纯虚函数标记为永不投掷。 MSVC编译器提供了一个__nothrow属性 - 该属性告诉编译器声明的函数和它调用的函数永远不会抛出异常。

但似乎它不适用于虚函数:如果我以这种方式声明抽象类

struct Interface
{
    virtual __nothrow void Foo() = 0;
};

сompiler仍然认为,Interface :: Foo()可以抛出(它在二进制代码中添加了不必要的SEH帧)。

此外,我尝试使用'throw()'和'extern“C”'声明函数 - 但编译器仍会生成错误的二进制代码。

MSVC编译器中是否有任何方式将虚函数声明为nothrow?

UPD:看来,这是一个错误。将其提交给Microsoft,here

0 个答案:

没有答案