gpt4 book ai didi

c++ - 右值引用绑定(bind)到 std::function 类型的左值

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:07 26 4
gpt4 key购买 nike

为什么下面的代码在(@)处没有编译错误?我认为 lamb 是左值,因此它不会绑定(bind)到右值引用。

using FunctionType = std::function<void()>;
using IntType = int;
struct Foo {
void bar(FunctionType&&) {}
void baz(IntType&&) {}
};

Foo foo;
foo.bar([]() {}); //OK
auto lamb = []() {};
foo.bar(lamb); //(@) No compilation error?!
foo.baz(5); //OK
int i = 5;
foo.baz(i); //Error

最佳答案

由于 lamb 是 lambda 而不是 std::function,因此必须创建一个临时的 std::function 并将其传递给栏()。临时绑定(bind)到右值引用。

你的代码等同于:

auto lamb = [](){};
foo.bar(FunctionType(lamb));

如果你这样做,你会得到一个编译错误:

FunctionType func = [](){};
foo.bar(func);

关于c++ - 右值引用绑定(bind)到 std::function 类型的左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41368675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com