繁体   English   中英

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

[英]What causes std::bad_function_call?

我见过几个 问题是指std::bad_function_call例外 ,但一直没能谷歌搜索是什么原因导致这个例外,找出任何。

什么样的行为应该导致这个例外? 你能给我一些没有其他语义问题的最小例子吗?

当然 - 最简单的是你尝试调用一个空的std::function

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

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

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

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

在我的情况下,问题是在捕获列表中。 我有一个递归的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)
{
...
}

从捕获列表中的f_build中丢失并生成错误的调用。

调用临时函数也可以抛出:

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 ++ throws,g ++ not)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM