代码:
#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/