函数指针中的c++异常规范

标签 c++ exception

代码:

#include<iostream>
using namespace std;

void foo() throw(char) {throw 'a';}

int main() try {

   void (*pf)() throw(float);
   pf = foo; // This should NOT work 
   pf();

}
catch(const char& c){cout << "Catched ::> " << c << endl;}

为什么可以将 foo 传递给 pf,即使 foo 异常规范不同于函数指针 pf 有?这是我的编译器中的错误吗?

最佳答案

Exception specifications don’t participate in a function’s type. 更正: 正如其他答案所指出的,这确实是一个编译器错误。众所周知,大多数编译器在实现异常规范时都存在缺陷。此外,它们在 C++11 中已弃用。所以,

遵循 Herb Sutter 的异常规范建议:

Moral #1: Never write an exception specification.

Moral #2: Except possibly an empty one, but if I were you I’d avoid even that.

关于函数指针中的c++异常规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13125454/

相关文章:

c++ token 模拟以从服务修改HKEY_CURRENT_USERS

C++:如何用拆分查找单词?正则表达式

ruby - 在多个地方重新引发同一组异常的 DRY 方式

exception - 从 Perl 6 中的异常处理程序返回值

exception - 如何解决 org.eclipse.core.internal.resources.ResourceException

c++ - 非友元类的运算符重载 C++

c++ - 如何从 X Y Z 旋转中找到四元数的 vector

c++ - 性能与可读性 : Local copies in functions

Python异常离开本地范围?

python - 如何设置 python 异常消息以使用特殊语言?