我有一些抽象的课程:
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。