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

Ken*_*oom 32 c++ lambda exception c++11

我已经看到了一些 问题,这指的是std::bad_function_call例外,但一直没能谷歌搜索是什么原因导致这个例外,找出任何.

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

Pup*_*ppy 48

当然 - 最简单的是你试图把它称为std::function空的.

int main() {
    std::function<int()> intfunc;
    int x = intfunc(); // BAD
}
Run Code Online (Sandbox Code Playgroud)

  • 我最好的猜测是你引用的答案可以归结为DeadMG在这里回答的相同情况:调用一个空的`std :: function`.对不起,我目前无法测试lambda代码.我仔细检查了最新的lambda规范,我找不到任何抛出`bad_function_call`的东西.我重新搜索了最新的'bad_function_call`草稿,注意抓住'bad_function_call`可能连字符的情况,并没有找到任何其他抛出的情况.还是有可能我错过了一个.如果你找到它,请为我们发一个指针. (4认同)
  • 不能相信它已经这么久但我没注意到功能的签名是错的,rofl. (3认同)

小智 5

就我而言,问题出在捕获列表中。我有一个递归 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)
{
...
}
Run Code Online (Sandbox Code Playgroud)

捕获列表中的 f_build缺失&会生成错误的调用。