gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:02:32 24 4
gpt4 key购买 nike

代码:

#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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com