如何摆脱"忽略C++异常规范"的警告

lia*_*iaK 7 c++ qt warnings exception-specification

我最近得到了一个已被其他人实现的dll.我必须在我的应用程序中使用它.在他们类的头文件中,他们有函数声明

void func1() throw (CCustomException);
Run Code Online (Sandbox Code Playgroud)

现在,当我编译它时,我收到警告,

忽略C++异常规范,除非指示函数不是_declspec(nothrow)

我阅读了MSDN - 文档,但无法理解它.另外,我不想因为它出现而禁用警告.我想知道我做错了什么而不是禁用它.

我认为我的功能,比如 从dll myfunc()访问func1()它没有那个Exception规范列表.因此,我尝试在我的函数中使用相应的异常规范列表,

void myfunc1() throw (CCustomException);
Run Code Online (Sandbox Code Playgroud)

但我仍然收到警告.什么是警告以及如何摆脱它?我在Windows XP中使用Qt 4.5.

Ale*_* C. 11

好吧,这是一个非答案,但我会抛弃异常规范,再也不会使用它.

编辑:我读得太快,我没有看到你自己没有写过这门课.在msvc中摆脱警告的最佳方法是通过#pragma warning(push),然后是#pragma warning(disable:xxxx),其中xxxx是警告代码:

#ifdef _MSC_VER 
#pragma warning(push)
#pragma warning(disable:xxxx)
#endif 

...

#ifdef _MSC_VER 
#pragma warning(pop)
#endif
Run Code Online (Sandbox Code Playgroud)

编辑:禁用警告是完全安全的.异常规范是邪恶的,编译器只告诉你它正在为你禁用它们.即使它打破了标准.

  • 听起来它正在编译为C++ 0x,其中不推荐使用这样的异常规范,而不是C++ 03.如果您需要其他'0x功能,可能有一个编译器选项指定您想要'03,或者只是为了重新启用异常规范. (2认同)