为什么std :: function可以用一个具有不同返回类型的lambda构造?

时间:2017-01-09 13:56:10

标签: c++ lambda std-function

以下compiles fine

#include <functional>

int main()
{
    std::function<const int&()> f = []() -> int {return 1;};
    const int& r = f(); // r is a dangling reference
    return 0;
}

为什么可以将具有std::function返回类型的const int&设置为具有int返回类型的lambda?恕我直言,允许这种演员表隐式发生而且没有任何警告。

1 个答案:

答案 0 :(得分:5)

您可以使用任何可以使用相关参数调用的对象构造std::function,并且其返回值可以隐式转换为std::function返回。 <{1}}可隐式转换为int,因此符合规则。

编译器可以随时警告这一点,但对于一个特别偏角的情况来说似乎需要做很多工作。