📅  最后修改于: 2023-12-03 15:07:52.633000             🧑  作者: Mango
std::bad_function_call
是C++标准库定义的一个异常类,表示函数对象被调用但没有有效的函数对象。
函数对象是C++中的一类对象,其行为类似于函数,并且可以被调用和传递。函数对象可以使用函数指针或者重载了operator()
的类实例化得到。
下面是一个使用函数对象的示例代码:
#include <iostream>
#include <functional>
int add(int x, int y) {
return x + y;
}
struct Sub {
int operator()(int x, int y) {
return x - y;
}
};
int main() {
std::function<int(int, int)> f_add = add;
std::function<int(int, int)> f_sub = Sub();
std::cout << f_add(1, 2) << std::endl;
std::cout << f_sub(3, 1) << std::endl;
// 调用空函数对象,抛出异常
std::function<int(int, int)> f_null;
try {
f_null(1, 2);
} catch (const std::bad_function_call& e) {
std::cout << "Error: " << e.what() << std::endl;
}
return 0;
}
在上面的示例代码中,我们使用了std::function
来封装函数对象,并能够使用()
进行调用。
为了演示std::bad_function_call
的使用,在代码中刻意定义了一个空的函数对象f_null
,在调用它的时候会抛出异常。
执行该程序将输出:
3
2
Error: call to empty std::function
这里异常的具体消息为call to empty std::function
,可以使用what()
方法获得。