"warning C4987: nonstandard extension used: 'throw (...)'"是什么意思?

What does "warning C4987: nonstandard extension used: 'throw (...)'" mean?

本文关键字:是什么 意思 warning extension used C4987 nonstandard throw      更新时间:2023-10-16

我正在尝试编译一个VC ++项目,它抱怨此错误

Microsoft Visual Studio 10.0VCatlmfcincludeatlalloc.h(517): warning C4987: nonstandard extension used: 'throw (...)'

它指向的线是

_Ret_opt_bytecap_x_(nElements * sizeof(T)) T* Allocate(_In_ size_t nElements) throw( ... )
    {
        return( AllocateBytes( ::ATL::AtlMultiplyThrow(nElements,sizeof( T )) ) );
    }

这意味着throw(...)异常规范是一个非标准扩展(如果有的话,这是一个非答案......),也就是说,C++标准没有为这段代码定义含义。在Visual Studio中,这意味着该函数可能会引发任何异常。

如果它是您自己的代码,您可以通过简单地删除异常规范来修复警告(好吧,无论如何,对于C++异常;我不知道这会如何影响Microsoft的结构化异常处理)。