导致std :: bad_function_call的原因是什么?

时间:2011-04-06 13:39:26

标签: c++ exception lambda c++11

我看到few questions引用了std::bad_function_call exception,但未能通过Google搜索找出导致此异常的原因。

应该导致此异常的行为是什么?你能给我一些没有其他语义问题的最小例子吗?

4 个答案:

答案 0 :(得分:46)

当然 - 最简单的方法是尝试拨打空std::function

int main() {
    std::function<int()> intfunc;
    int x = intfunc(); // BAD
}

答案 1 :(得分:3)

“在没有调用目标的情况下执行函数调用会抛出类型异常 的std :: bad_function_call“

    std::function<void(int,int)> f;
    f(33,66); // throws std::bad_function_call

没有给我信任....它的C ++标准Lib的Nicolai Josuttis Pundit

答案 2 :(得分:3)

在我的情况下,问题出现在捕获列表中。我有一个递归的lambda函数。

//decl
std::function<void(const SBone*, const core::vector3df&, const core::quaternion&)> f_build;
f_build = [&f_build](const SBone* bone, const core::vector3df& pos, const core::quaternion& rot)
{
...
}

缺失&amp;从捕获列表中的f_build生成一个错误的调用。

答案 3 :(得分:0)

调用临时函数也可能引发:

struct F
{
    const std::function<void()>& myF;

    F(const std::function<void()>& f) : myF(f) {}

    void call()
    {
        myF();
    }
};

int main()
{
    F f([]{ std::cout << "Hello World!" << std::endl;});

    f.call();

    return 0;
}

但这取决于编译器(vc ++抛出,而g ++则不是)。